Para desenvolvedores

API do SisPoli

Conecte seu site, aplicativo ou sistema à plataforma. Consuma posts do blog, capture contatos e consulte dados geográficos.

Base URLhttps://api.sispoli.com.br/v1
v1 — EstávelREST + JSON

Autenticação

As APIs públicas não requerem autenticação. Para endpoints que necessitam identificar a organização, utilize o parâmetro org_id ou o header X-API-Key.

API Key: Obtenha sua chave em Configurações → Integrações → Chaves de API no painel do SisPoli.

# Exemplo com API Key
curl -H "X-API-Key: sp_live_xxxxxxxxxxxxxxxx" \
  https://api.sispoli.com.br/v1/public/capture

Blog

Endpoints para consumir posts publicados pela organização. A organização é identificada automaticamente pela API Key.

Todos os endpoints de blog requerem o header X-API-Key. A organização é identificada automaticamente pela chave.

GET
/public/blog/posts

Lista posts publicados com paginação e filtros

ParâmetroTipoObrigatórioDescrição
pageintegerNãoPágina (padrão: 1)
per_pageintegerNãoItens por página (padrão: 10, máx: 50)
categorystringNãoFiltrar por slug da categoria
tagstringNãoFiltrar por slug da tag
featuredbooleanNãoApenas posts em destaque
searchstringNãoBuscar por título ou resumo
curl -H "X-API-Key: sp_live_xxxxxxxx" \
  "https://api.sispoli.com.br/v1/public/blog/posts?per_page=5&category=noticias"

# Resposta
{
  "data": [
    {
      "id": 1,
      "title": "Inauguração da obra no centro",
      "slug": "inauguracao-da-obra-no-centro",
      "excerpt": "Resumo da notícia...",
      "cover_image_url": "https://...",
      "category_name": "Notícias",
      "author_name": "João Silva",
      "published_at": "2026-04-09T15:00:00Z",
      "views_count": 42,
      "reading_time": 3,
      "is_featured": false,
      "is_pinned": false,
      "tags": [{"name": "Infraestrutura", "slug": "infraestrutura"}]
    }
  ],
  "meta": {"total": 15, "page": 1, "per_page": 5, "last_page": 3}
}
GET
/public/blog/posts/{slug}

Retorna post completo pelo slug (incrementa visualizações automaticamente)

curl -H "X-API-Key: sp_live_xxxxxxxx" \
  "https://api.sispoli.com.br/v1/public/blog/posts/inauguracao-da-obra-no-centro"

# Resposta — inclui content (HTML completo), SEO e tags
{
  "data": {
    "title": "Inauguração da obra no centro",
    "slug": "inauguracao-da-obra-no-centro",
    "content": "<h2>Detalhes</h2><p>Conteúdo completo...</p>",
    "cover_image_url": "https://...",
    "seo_title": "Inauguração | Ceci",
    "seo_description": "Resumo para SEO...",
    "tags": [{"name": "Infraestrutura", "slug": "infraestrutura"}]
  }
}
GET
/public/blog/posts/categories

Lista categorias ativas com contagem de posts publicados

curl -H "X-API-Key: sp_live_xxxxxxxx" \
  "https://api.sispoli.com.br/v1/public/blog/posts/categories"

# Resposta
{
  "data": [
    {"id": 1, "name": "Notícias", "slug": "noticias", "description": "...", "posts_count": 8},
    {"id": 2, "name": "Comunicados", "slug": "comunicados", "posts_count": 3}
  ]
}
GET
/public/blog/posts/tags

Lista tags com contagem de posts publicados

curl -H "X-API-Key: sp_live_xxxxxxxx" \
  "https://api.sispoli.com.br/v1/public/blog/posts/tags"

# Resposta
{
  "data": [
    {"id": 1, "name": "Saúde", "slug": "saude", "posts_count": 5},
    {"id": 2, "name": "Educação", "slug": "educacao", "posts_count": 3}
  ]
}
GET
/public/blog/posts/{slug}/related

Retorna até 4 posts relacionados (mesma categoria)

curl -H "X-API-Key: sp_live_xxxxxxxx" \
  "https://api.sispoli.com.br/v1/public/blog/posts/inauguracao-da-obra-no-centro/related"

# Resposta — posts da mesma categoria, excluindo o atual
{
  "data": [
    {"title": "Nova praça inaugurada", "slug": "nova-praca", "excerpt": "...", "cover_image_url": "..."}
  ]
}

Captação de Contatos

Endpoints para captar contatos via formulários configurados no painel. Cada formulário tem um slug único.

GET
/public/forms/{slug}

Retorna dados do formulário e da organização (sem autenticação)

curl "https://api.sispoli.com.br/v1/public/forms/ePtN7Wqw"

# Resposta
{
  "data": {
    "form": {
      "name": "Apoio à campanha",
      "require_name": true,
      "require_phone": true,
      "require_email": false,
      "require_cpf": false,
      "require_city": true
    },
    "organization": {
      "name": "Ceci",
      "political_name": "Ceci"
    }
  }
}
POST
/public/forms/{slug}/submit

Submete dados de um contato via formulário

ParâmetroTipoObrigatórioDescrição
namestringSimNome completo
phonestringSimTelefone celular — apenas números, 11 dígitos (DDD + 9 + número). Ex: 82999990000. Sem máscara, sem +55.
emailstringNãoE-mail
cpfstringNãoCPF — apenas números, 11 dígitos. Sem pontos ou traço.
geo_city_idintegerNãoID da cidade (via /public/geo)
birth_datedateNãoData de nascimento (YYYY-MM-DD)
channelstringNãoCanal: SITE, WHATSAPP, INSTAGRAM, API, OTHER
genderstringNãoM, F ou O
curl -X POST "https://api.sispoli.com.br/v1/public/forms/ePtN7Wqw/submit" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Maria Silva",
    "phone": "82999990000",
    "geo_city_id": 2839,
    "channel": "SITE"
  }'

# Resposta 201
{"message": "Cadastro realizado com sucesso!", "data": {"voter_id": 1052}}

# Resposta 409 (duplicado)
{"message": "Contato já cadastrado", "data": {"voter_id": 1052}}
POST
/public/capture

Captação direta via API Key (sem formulário)

Requer: Header X-API-Key

curl -X POST "https://api.sispoli.com.br/v1/public/capture" \
  -H "X-API-Key: sp_live_xxxxxxxxxxxxxxxx" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "João Oliveira",
    "phone": "82988880000",
    "email": "joao@email.com"
  }'

Geolocalização

Endpoints para consultar estados, cidades e CEPs. Útil para preencher formulários com dados geográficos.

GET
/geo/states

Lista todos os estados brasileiros

GET
/geo/states/{stateId}/cities

Lista cidades de um estado

GET
/public/geo/cep/{cep}

Consulta CEP e retorna endereço com city_id

# Listar estados
curl "https://api.sispoli.com.br/v1/geo/states"

# Cidades de Alagoas (id=1)
curl "https://api.sispoli.com.br/v1/geo/states/1/cities"

# Consultar CEP
curl "https://api.sispoli.com.br/v1/public/geo/cep/57036410"
# Resposta
{
  "data": {
    "zip_code": "57036410",
    "street": "Rua Exemplo",
    "neighborhood": "Centro",
    "city_name": "Maceió",
    "state_code": "AL",
    "geo_city_id": 2839,
    "geo_neighborhood_id": 45
  }
}

Códigos de Erro

CódigoDescrição
200Requisição bem-sucedida
201Recurso criado com sucesso
401API Key inválida, inativa ou não enviada
404Recurso não encontrado
409Conflito — contato já cadastrado (retorna voter_id)
422Validação falhou — campos obrigatórios não enviados
429Rate limit excedido
500Erro interno do servidor

Precisa de ajuda?

Entre em contato com nossa equipe para suporte técnico na integração.

Falar com suporte