Integração

API para desenvolvedores

Tudo o que o aplicativo do cidadão e o painel do gestor fazem passa pela mesma API REST — documentada em OpenAPI 3.1, versão 1.0.0, com 78 operações. Integre o Tá Resolvido ao protocolo da prefeitura, ao SEI, ao BI, ao portal da transparência ou a um chatbot sem depender da CM3 Soluções Tecnológicas.

Base desta instalação: https://taresolvido.app.br/api/v1

Comece em cinco minutos

  1. Peça um usuário de integração ao administrador da prefeitura em Painel › Administração › Usuários(papel OPERADOR para consultar, GESTOR para movimentar, ADMIN para cadastros e exportação). Consultas públicas (mapa, protocolo, dados abertos) não precisam de login.
  2. Faça login em POST /api/v1/auth/login e guarde o token (JWT).
  3. Envie o token em Authorization: Bearer <token> e o município em X-Municipio: <slug> em toda chamada.
  4. Explore a referência interativa: ela gera o código em curl, JavaScript, Python, PHP, Java e outros, e permite testar cada chamada aqui mesmo.

Autenticação

JWT no header Authorization: Bearer. O painel web usa o mesmo token no cookie tr_token. Contas com verificação em duas etapas concluem o login em POST /auth/2fa. Tokens expiram; refaça o login quando receber 401.

Município (tenant)

Cada prefeitura é uma edição isolada. Informe a cidade por X-Municipio: manaus, por ?municipio=manaus ou usando o subdomínio manaus.taresolvido.app.br. Dados de um município nunca aparecem nas respostas de outro.

Paginação

Listas aceitam page e perPage (máximo 100) e devolvem total, page e perPage junto com os itens. A auditoria pagina por pagina (50 por página). Ordene com ordem quando disponível.

Formatos

JSON em UTF-8; datas em ISO 8601 (UTC); coordenadas em graus decimais (WGS 84). Relatórios e dados abertos também em CSV (UTF-8 com BOM, separador ;) e PDF.

Erros

Toda falha vem com o mesmo corpo: { "erro": "mensagem legível", "detalhes": ... }. Em 422, detalhes traz os erros por campo ({ "campo": ["mensagem"] }).

CódigoQuando acontece
400Corpo inválido (JSON malformado) ou parâmetro fora do esperado.
401Sem token, token expirado ou senha incorreta.
403Logado, mas sem papel para a ação neste município (ou município desativado).
404Recurso inexistente — ou pertencente a outro município.
409Conflito de regra de negócio: transição de status não permitida, sigla duplicada, órgão com vínculos.
422Dados inválidos (validação zod), com detalhes por campo.
429Limite de requisições (ex.: reenvio de código antes de 60 s).

Exemplos com curl

1. Login e token

O e-mail (ou telefone) e a senha do usuário de integração. A resposta traz token e os papéis por município.

curl -X POST https://taresolvido.app.br/api/v1/auth/login \
  -H 'Content-Type: application/json' \
  -d '{"login": "operador@manaus.taresolvido.app.br", "senha": "•••••••"}'

# resposta: { "token": "eyJhbGciOi...", "usuario": { "nome": "...", "membros": [ { "papel": "OPERADOR", ... } ] } }
export TOKEN="eyJhbGciOi..."

2. Consultar um protocolo (público)

Aceita o id ou o número do protocolo. Ocorrências anônimas não expõem o autor.

curl https://taresolvido.app.br/api/v1/ocorrencias/MAO-2026-000123 -H 'X-Municipio: manaus'

3. Listar ocorrências abertas de um órgão (paginado)

Filtros por status (vários separados por vírgula), orgaoId, categoriaId, proximidade (lat, lng, raioM) e ordem.

curl "https://taresolvido.app.br/api/v1/ocorrencias?status=RECEBIDA,EM_ANALISE,EM_EXECUCAO&perPage=50&page=1" \
  -H 'X-Municipio: manaus'

4. Registrar uma ocorrência em nome do cidadão (ex.: central telefônica)

Use a categoria do catálogo (GET /municipios/manaus). O órgão responsável e o prazo (SLA) são atribuídos automaticamente pela categoria.

curl -X POST https://taresolvido.app.br/api/v1/ocorrencias \
  -H "Authorization: Bearer $TOKEN" -H 'X-Municipio: manaus' -H 'Content-Type: application/json' \
  -d '{
    "categoriaId": "<id da categoria>",
    "descricao": "Buraco grande na pista, em frente ao nº 1200",
    "lat": -3.1019, "lng": -60.0250,
    "endereco": "Av. Djalma Batista, 1200",
    "anonima": false
  }'

5. Mudar o status (gestor) com mensagem pública ao cidadão

Só transições permitidas (senão 409). O cidadão recebe push/WhatsApp e a ação fica na auditoria.

curl -X PATCH https://taresolvido.app.br/api/v1/ocorrencias/<id>/status \
  -H "Authorization: Bearer $TOKEN" -H 'X-Municipio: manaus' -H 'Content-Type: application/json' \
  -d '{"status": "EM_EXECUCAO", "mensagem": "Equipe da SEMINF programada para amanhã pela manhã."}'

6. Dados abertos e exportação integral

Dados anonimizados para a transparência não exigem login; a exportação integral (JSON/CSV) exige o papel ADMIN e é auditada.

# transparência (público, anonimizado)
curl "https://taresolvido.app.br/api/v1/dados-abertos/ocorrencias.csv?municipio=manaus" -o ocorrencias-manaus.csv

# exportação integral (ADMIN)
curl "https://taresolvido.app.br/api/v1/admin/exportacao/completo.json" \
  -H "Authorization: Bearer $TOKEN" -H 'X-Municipio: manaus' -o manaus-completo.json

7. Gerar clientes automaticamente

O documento OpenAPI serve para gerar SDKs (openapi-generator, orval, kiota), importar no Postman/Insomnia ou validar contratos em CI.

curl https://taresolvido.app.br/api/v1/openapi.json -o taresolvido-openapi.json
npx @openapitools/openapi-generator-cli generate -i taresolvido-openapi.json -g typescript-fetch -o ./sdk

Webhooks e WhatsApp. A API também recebe eventos da Meta Cloud API em POST /whatsapp/webhook e executa alertas de prazo por POST /tarefas/alertas (protegido por CRON_SECRET). Precisa de um evento novo para o seu sistema? Fale com a CM3 Soluções Tecnológicas em /contato.

Referência interativa

Gerada em tempo real a partir de /api/v1/openapi.json — os corpos e parâmetros vêm dos mesmos schemas que validam as requisições, então o documento nunca fica defasado. Use o botão Test Request com o seu token para experimentar.

Carregando a referência interativa… A lista de endpoints abaixo já está disponível.

Autenticação

20 operações · base https://taresolvido.app.br/api/v1

EndpointDescriçãoAcesso
POST/api/v1/auth/registroCadastro do cidadãopública
POST/api/v1/auth/verificarConfirmar o código do cadastropública
POST/api/v1/auth/reenviarReenviar o código do cadastropública
POST/api/v1/auth/loginLogin (e-mail ou telefone + senha)pública
POST/api/v1/auth/2faSegunda etapa do login (TOTP ou código de recuperação)pública
GET/api/v1/auth/meUsuário autenticadologin
DELETE/api/v1/auth/meSair (painel web)login
POST/api/v1/auth/senhaTrocar a senhalogin
POST/api/v1/auth/totp/gerarGerar o segredo TOTP (QR code)login
POST/api/v1/auth/totp/ativarAtivar a verificação em duas etapaslogin
POST/api/v1/auth/totp/desativarDesativar a verificação em duas etapaslogin
GET/api/v1/auth/govbr/iniciarIniciar login com gov.br (OpenID Connect)pública
GET/api/v1/auth/govbr/callbackRetorno do gov.brpública
GET/api/v1/auth/social/{provedor}/iniciarIniciar login social (Google, Apple ou Facebook)pública
GET/api/v1/auth/social/{provedor}/callbackRetorno do provedor socialpública
POST/api/v1/auth/social/{provedor}/callbackRetorno do provedor social (form_post da Apple)pública
GET/api/v1/auth/social/{provedor}/simularTela de simulação do provedor (demonstração)pública
POST/api/v1/auth/social/{provedor}/simularEnviar a simulaçãopública
GET/api/v1/auth/identidadesContas externas vinculadaslogin
DELETE/api/v1/auth/identidadesDesvincular uma conta externalogin

Municípios

2 operações · base https://taresolvido.app.br/api/v1

EndpointDescriçãoAcesso
GET/api/v1/municipiosMunicípios ativospública
GET/api/v1/municipios/{slug}Detalhe do municípiopública

Ocorrências

7 operações · base https://taresolvido.app.br/api/v1

EndpointDescriçãoAcesso
GET/api/v1/ocorrenciasListar ocorrências (mapa, fila do painel e tarefas de campo)públicaX-Municipio
POST/api/v1/ocorrenciasRegistrar ocorrência ou manifestaçãologinX-Municipio
GET/api/v1/ocorrencias/{id}Detalhe com linha do tempopúblicaX-Municipio
POST/api/v1/ocorrencias/{id}/apoiarApoiar / retirar apoiologinX-Municipio
POST/api/v1/ocorrencias/{id}/avaliarAvaliar o atendimento (1 a 5)loginX-Municipio
PATCH/api/v1/ocorrencias/{id}/statusAtualizar status / encaminhar / atribuir / responder / concluirgestorX-Municipio
GET/api/v1/ocorrencias/{id}/semelhantesCandidatas a duplicatagestorX-Municipio

Uploads

1 operação · base https://taresolvido.app.br/api/v1

EndpointDescriçãoAcesso
POST/api/v1/uploads/presignURL assinada para enviar imagemloginX-Municipio

Dispositivos

2 operações · base https://taresolvido.app.br/api/v1

EndpointDescriçãoAcesso
POST/api/v1/dispositivosRegistrar token de push (Expo)login
DELETE/api/v1/dispositivosRemover token de pushlogin

Dashboard

2 operações · base https://taresolvido.app.br/api/v1

EndpointDescriçãoAcesso
GET/api/v1/dashboard/resumoIndicadores executivosgestorX-Municipio
GET/api/v1/dashboard/mapaMapa operacional e onde melhorargestorX-Municipio

Site

1 operação · base https://taresolvido.app.br/api/v1

EndpointDescriçãoAcesso
POST/api/v1/contatoSolicitar demonstração (lead comercial)pública

Administração

22 operações · base https://taresolvido.app.br/api/v1

EndpointDescriçãoAcesso
GET/api/v1/admin/orgaosListar órgãosadministradorX-Municipio
POST/api/v1/admin/orgaosCriar órgãoadministradorX-Municipio
PATCH/api/v1/admin/orgaos/{id}Editar órgãoadministradorX-Municipio
DELETE/api/v1/admin/orgaos/{id}Excluir órgãoadministradorX-Municipio
GET/api/v1/admin/categoriasListar categorias (inclui inativas)administradorX-Municipio
POST/api/v1/admin/categoriasCriar categoriaadministradorX-Municipio
PATCH/api/v1/admin/categorias/{id}Editar categoriaadministradorX-Municipio
DELETE/api/v1/admin/categorias/{id}Excluir categoriaadministradorX-Municipio
POST/api/v1/admin/categorias/restaurarRestaurar catálogo padrãoadministradorX-Municipio
GET/api/v1/admin/bairrosListar bairrosadministradorX-Municipio
POST/api/v1/admin/bairrosCriar bairroadministradorX-Municipio
PATCH/api/v1/admin/bairros/{id}Editar bairroadministradorX-Municipio
DELETE/api/v1/admin/bairros/{id}Remover bairroadministradorX-Municipio
GET/api/v1/admin/membrosListar usuários do municípioadministradorX-Municipio
POST/api/v1/admin/membrosCriar servidor (usuário + papel)administradorX-Municipio
PATCH/api/v1/admin/membros/{id}Alterar papel ou órgãoadministradorX-Municipio
DELETE/api/v1/admin/membros/{id}Retirar acesso do usuárioadministradorX-Municipio
GET/api/v1/admin/municipioConfiguração do municípioadministradorX-Municipio
PATCH/api/v1/admin/municipioEditar configuraçãoadministradorX-Municipio
GET/api/v1/admin/auditoriaConsultar auditoria (log de ações)administradorX-Municipio
GET/api/v1/admin/exportacaoInventário da exportação integraladministradorX-Municipio
GET/api/v1/admin/exportacao/{arquivo}Baixar exportação (JSON completo ou CSV por tabela)administradorX-Municipio

Documentação

1 operação · base https://taresolvido.app.br/api/v1

EndpointDescriçãoAcesso
GET/api/v1/openapi.jsonEste documento (OpenAPI 3.1)pública

Relatórios

8 operações · base https://taresolvido.app.br/api/v1

EndpointDescriçãoAcesso
GET/api/v1/relatorios/ocorrencias.csvRelatório de ocorrências em CSVgestorX-Municipio
GET/api/v1/relatorios/ocorrencias.pdfRelatório de ocorrências em PDFgestorX-Municipio
GET/api/v1/relatorios/ocorrencias.jsonPrévia do relatório de ocorrênciasgestorX-Municipio
GET/api/v1/relatorios/mensal.pdfRelatório executivo mensal (PDF)gestorX-Municipio
GET/api/v1/relatorios/mensal.jsonRelatório executivo mensal (dados)gestorX-Municipio
GET/api/v1/relatorios/ouvidoria-anual.pdfRelatório anual de gestão da ouvidoria (PDF)gestorX-Municipio
GET/api/v1/relatorios/ouvidoria-anual.csvAnexo CSV do relatório anual de ouvidoriagestorX-Municipio
GET/api/v1/relatorios/ouvidoria-anual.jsonRelatório anual de ouvidoria (dados)gestorX-Municipio

Dados abertos

3 operações · base https://taresolvido.app.br/api/v1

EndpointDescriçãoAcesso
GET/api/v1/dados-abertos/ocorrencias.csvDados abertos: ocorrências (CSV)públicaX-Municipio
GET/api/v1/dados-abertos/ocorrencias.jsonDados abertos: ocorrências (JSON)públicaX-Municipio
GET/api/v1/dados-abertos/indicadores.jsonDados abertos: indicadores do municípiopúblicaX-Municipio

WhatsApp

6 operações · base https://taresolvido.app.br/api/v1

EndpointDescriçãoAcesso
GET/api/v1/whatsapp/webhookVerificação do webhook (Meta)webhook
POST/api/v1/whatsapp/webhookMensagens recebidas (Meta Cloud API)webhook
GET/api/v1/whatsapp/conversasConversas do municípiogestorX-Municipio
PATCH/api/v1/whatsapp/conversas/{telefone}Encerrar o atendimento humanogestorX-Municipio
DELETE/api/v1/whatsapp/conversas/{telefone}Apagar a conversagestorX-Municipio
POST/api/v1/whatsapp/simularSimular uma mensagem do cidadãogestorX-Municipio

Infraestrutura

1 operação · base https://taresolvido.app.br/api/v1

EndpointDescriçãoAcesso
GET/api/v1/tls/permitirAutorizar certificado de um domínio (uso interno do proxy)pública

Alertas

2 operações · base https://taresolvido.app.br/api/v1

EndpointDescriçãoAcesso
POST/api/v1/tarefas/alertasProcessar alertas de SLA e repercussãoCRON_SECRET
GET/api/v1/tarefas/alertasProcessar alertas (GET, para agendadores que só fazem GET)CRON_SECRET