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.
Comece em cinco minutos
- Peça um usuário de integração ao administrador da prefeitura em Painel › Administração › Usuários(papel
OPERADORpara consultar,GESTORpara movimentar,ADMINpara cadastros e exportação). Consultas públicas (mapa, protocolo, dados abertos) não precisam de login. - Faça login em
POST /api/v1/auth/logine guarde otoken(JWT). - Envie o token em
Authorization: Bearer <token>e o município emX-Municipio: <slug>em toda chamada. - 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ódigo | Quando acontece |
|---|---|
400 | Corpo inválido (JSON malformado) ou parâmetro fora do esperado. |
401 | Sem token, token expirado ou senha incorreta. |
403 | Logado, mas sem papel para a ação neste município (ou município desativado). |
404 | Recurso inexistente — ou pertencente a outro município. |
409 | Conflito de regra de negócio: transição de status não permitida, sigla duplicada, órgão com vínculos. |
422 | Dados inválidos (validação zod), com detalhes por campo. |
429 | Limite 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://coari.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://coari.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://coari.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://coari.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://coari.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://coari.taresolvido.app.br/api/v1/dados-abertos/ocorrencias.csv?municipio=manaus" -o ocorrencias-manaus.csv
# exportação integral (ADMIN)
curl "https://coari.taresolvido.app.br/api/v1/admin/exportacao/completo.json" \
-H "Authorization: Bearer $TOKEN" -H 'X-Municipio: manaus' -o manaus-completo.json7. 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://coari.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 ./sdkWebhooks 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://coari.taresolvido.app.br/api/v1
| Endpoint | Descrição | Acesso |
|---|---|---|
| POST/api/v1/auth/registro | Cadastro do cidadão | pública |
| POST/api/v1/auth/verificar | Confirmar o código do cadastro | pública |
| POST/api/v1/auth/reenviar | Reenviar o código do cadastro | pública |
| POST/api/v1/auth/login | Login (e-mail ou telefone + senha) | pública |
| POST/api/v1/auth/2fa | Segunda etapa do login (TOTP ou código de recuperação) | pública |
| GET/api/v1/auth/me | Usuário autenticado | login |
| DELETE/api/v1/auth/me | Sair (painel web) | login |
| POST/api/v1/auth/senha | Trocar a senha | login |
| POST/api/v1/auth/totp/gerar | Gerar o segredo TOTP (QR code) | login |
| POST/api/v1/auth/totp/ativar | Ativar a verificação em duas etapas | login |
| POST/api/v1/auth/totp/desativar | Desativar a verificação em duas etapas | login |
| GET/api/v1/auth/govbr/iniciar | Iniciar login com gov.br (OpenID Connect) | pública |
| GET/api/v1/auth/govbr/callback | Retorno do gov.br | pública |
| GET/api/v1/auth/social/{provedor}/iniciar | Iniciar login social (Google, Apple ou Facebook) | pública |
| GET/api/v1/auth/social/{provedor}/callback | Retorno do provedor social | pública |
| POST/api/v1/auth/social/{provedor}/callback | Retorno do provedor social (form_post da Apple) | pública |
| GET/api/v1/auth/social/{provedor}/simular | Tela de simulação do provedor (demonstração) | pública |
| POST/api/v1/auth/social/{provedor}/simular | Enviar a simulação | pública |
| GET/api/v1/auth/identidades | Contas externas vinculadas | login |
| DELETE/api/v1/auth/identidades | Desvincular uma conta externa | login |
Municípios
2 operações · base https://coari.taresolvido.app.br/api/v1
| Endpoint | Descrição | Acesso |
|---|---|---|
| GET/api/v1/municipios | Municípios ativos | pública |
| GET/api/v1/municipios/{slug} | Detalhe do município | pública |
Ocorrências
7 operações · base https://coari.taresolvido.app.br/api/v1
| Endpoint | Descrição | Acesso |
|---|---|---|
| GET/api/v1/ocorrencias | Listar ocorrências (mapa, fila do painel e tarefas de campo) | públicaX-Municipio |
| POST/api/v1/ocorrencias | Registrar ocorrência ou manifestação | loginX-Municipio |
| GET/api/v1/ocorrencias/{id} | Detalhe com linha do tempo | públicaX-Municipio |
| POST/api/v1/ocorrencias/{id}/apoiar | Apoiar / retirar apoio | loginX-Municipio |
| POST/api/v1/ocorrencias/{id}/avaliar | Avaliar o atendimento (1 a 5) | loginX-Municipio |
| PATCH/api/v1/ocorrencias/{id}/status | Atualizar status / encaminhar / atribuir / responder / concluir | gestorX-Municipio |
| GET/api/v1/ocorrencias/{id}/semelhantes | Candidatas a duplicata | gestorX-Municipio |
Uploads
1 operação · base https://coari.taresolvido.app.br/api/v1
| Endpoint | Descrição | Acesso |
|---|---|---|
| POST/api/v1/uploads/presign | URL assinada para enviar imagem | loginX-Municipio |
Dispositivos
2 operações · base https://coari.taresolvido.app.br/api/v1
| Endpoint | Descrição | Acesso |
|---|---|---|
| POST/api/v1/dispositivos | Registrar token de push (Expo) | login |
| DELETE/api/v1/dispositivos | Remover token de push | login |
Dashboard
2 operações · base https://coari.taresolvido.app.br/api/v1
| Endpoint | Descrição | Acesso |
|---|---|---|
| GET/api/v1/dashboard/resumo | Indicadores executivos | gestorX-Municipio |
| GET/api/v1/dashboard/mapa | Mapa operacional e onde melhorar | gestorX-Municipio |
Site
1 operação · base https://coari.taresolvido.app.br/api/v1
| Endpoint | Descrição | Acesso |
|---|---|---|
| POST/api/v1/contato | Solicitar demonstração (lead comercial) | pública |
Administração
22 operações · base https://coari.taresolvido.app.br/api/v1
| Endpoint | Descrição | Acesso |
|---|---|---|
| GET/api/v1/admin/orgaos | Listar órgãos | administradorX-Municipio |
| POST/api/v1/admin/orgaos | Criar órgão | administradorX-Municipio |
| PATCH/api/v1/admin/orgaos/{id} | Editar órgão | administradorX-Municipio |
| DELETE/api/v1/admin/orgaos/{id} | Excluir órgão | administradorX-Municipio |
| GET/api/v1/admin/categorias | Listar categorias (inclui inativas) | administradorX-Municipio |
| POST/api/v1/admin/categorias | Criar categoria | administradorX-Municipio |
| PATCH/api/v1/admin/categorias/{id} | Editar categoria | administradorX-Municipio |
| DELETE/api/v1/admin/categorias/{id} | Excluir categoria | administradorX-Municipio |
| POST/api/v1/admin/categorias/restaurar | Restaurar catálogo padrão | administradorX-Municipio |
| GET/api/v1/admin/bairros | Listar bairros | administradorX-Municipio |
| POST/api/v1/admin/bairros | Criar bairro | administradorX-Municipio |
| PATCH/api/v1/admin/bairros/{id} | Editar bairro | administradorX-Municipio |
| DELETE/api/v1/admin/bairros/{id} | Remover bairro | administradorX-Municipio |
| GET/api/v1/admin/membros | Listar usuários do município | administradorX-Municipio |
| POST/api/v1/admin/membros | Criar servidor (usuário + papel) | administradorX-Municipio |
| PATCH/api/v1/admin/membros/{id} | Alterar papel ou órgão | administradorX-Municipio |
| DELETE/api/v1/admin/membros/{id} | Retirar acesso do usuário | administradorX-Municipio |
| GET/api/v1/admin/municipio | Configuração do município | administradorX-Municipio |
| PATCH/api/v1/admin/municipio | Editar configuração | administradorX-Municipio |
| GET/api/v1/admin/auditoria | Consultar auditoria (log de ações) | administradorX-Municipio |
| GET/api/v1/admin/exportacao | Inventário da exportação integral | administradorX-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://coari.taresolvido.app.br/api/v1
| Endpoint | Descrição | Acesso |
|---|---|---|
| GET/api/v1/openapi.json | Este documento (OpenAPI 3.1) | pública |
Relatórios
8 operações · base https://coari.taresolvido.app.br/api/v1
| Endpoint | Descrição | Acesso |
|---|---|---|
| GET/api/v1/relatorios/ocorrencias.csv | Relatório de ocorrências em CSV | gestorX-Municipio |
| GET/api/v1/relatorios/ocorrencias.pdf | Relatório de ocorrências em PDF | gestorX-Municipio |
| GET/api/v1/relatorios/ocorrencias.json | Prévia do relatório de ocorrências | gestorX-Municipio |
| GET/api/v1/relatorios/mensal.pdf | Relatório executivo mensal (PDF) | gestorX-Municipio |
| GET/api/v1/relatorios/mensal.json | Relatório executivo mensal (dados) | gestorX-Municipio |
| GET/api/v1/relatorios/ouvidoria-anual.pdf | Relatório anual de gestão da ouvidoria (PDF) | gestorX-Municipio |
| GET/api/v1/relatorios/ouvidoria-anual.csv | Anexo CSV do relatório anual de ouvidoria | gestorX-Municipio |
| GET/api/v1/relatorios/ouvidoria-anual.json | Relatório anual de ouvidoria (dados) | gestorX-Municipio |
Dados abertos
3 operações · base https://coari.taresolvido.app.br/api/v1
| Endpoint | Descrição | Acesso |
|---|---|---|
| GET/api/v1/dados-abertos/ocorrencias.csv | Dados abertos: ocorrências (CSV) | públicaX-Municipio |
| GET/api/v1/dados-abertos/ocorrencias.json | Dados abertos: ocorrências (JSON) | públicaX-Municipio |
| GET/api/v1/dados-abertos/indicadores.json | Dados abertos: indicadores do município | públicaX-Municipio |
6 operações · base https://coari.taresolvido.app.br/api/v1
| Endpoint | Descrição | Acesso |
|---|---|---|
| GET/api/v1/whatsapp/webhook | Verificação do webhook (Meta) | webhook |
| POST/api/v1/whatsapp/webhook | Mensagens recebidas (Meta Cloud API) | webhook |
| GET/api/v1/whatsapp/conversas | Conversas do município | gestorX-Municipio |
| PATCH/api/v1/whatsapp/conversas/{telefone} | Encerrar o atendimento humano | gestorX-Municipio |
| DELETE/api/v1/whatsapp/conversas/{telefone} | Apagar a conversa | gestorX-Municipio |
| POST/api/v1/whatsapp/simular | Simular uma mensagem do cidadão | gestorX-Municipio |
Infraestrutura
1 operação · base https://coari.taresolvido.app.br/api/v1
| Endpoint | Descrição | Acesso |
|---|---|---|
| GET/api/v1/tls/permitir | Autorizar certificado de um domínio (uso interno do proxy) | pública |
Alertas
2 operações · base https://coari.taresolvido.app.br/api/v1
| Endpoint | Descrição | Acesso |
|---|---|---|
| POST/api/v1/tarefas/alertas | Processar alertas de SLA e repercussão | CRON_SECRET |
| GET/api/v1/tarefas/alertas | Processar alertas (GET, para agendadores que só fazem GET) | CRON_SECRET |