Manual de Integração - MSolutions Multas API
Versão 1.0.0 | Produção | 30/08/2026
1. Objetivo
A MSolutions Multas API recebe veículos do sistema Frota Segura, registra a solicitação, coloca cada placa em uma fila e consulta multas RENAINF no DespaDoc. O processamento é assíncrono: o recebimento da solicitação e a conclusão da pesquisa acontecem em momentos diferentes.
Endereço público da API: https://multasapi.msolutions.dev.br/
Todas as rotas descritas neste manual devem ser acrescentadas a esse endereço-base. Exemplo: https://multasapi.msolutions.dev.br/api/v1/consultas.
2. Autenticação
Todas as rotas iniciadas por /api/v1 exigem o cabeçalho:
X-API-Key: CHAVE_FORNECIDA_PELA_MSOLUTIONS
Envie somente o valor da chave, sem Bearer, aspas ou colchetes. Os endpoints /status e /status/pronto são públicos. Chaves devem ser transmitidas separadamente deste manual e armazenadas como segredo.
3. Fluxo de integração
- O consumidor envia um veículo ou até 500 veículos da mesma empresa em
POST /api/v1/consultas. - A API cadastra ou atualiza cada veículo, cria um lote e responde imediatamente com HTTP 202 e um
lote_id. - Cada placa aguarda na fila. O robô inicia novas pesquisas somente entre 08:00 e 19:00, no fuso
America/Sao_Paulo. - O robô consulta todas as multas dos últimos 180 dias, abre os detalhes e grava somente multas ainda inexistentes.
- O consumidor acompanha o lote em
GET /api/v1/consultas/{lote_id}. - Após a conclusão, o consumidor lê as multas do veículo ou busca todas as multas pendentes de retorno.
- Depois de processar cada multa, o consumidor confirma o recebimento em
POST /api/v1/multas/{multa_id}/marcar-enviada.
4. Identidade do veículo
O contrato preserva exatamente:
company_id: UUID da empresa no Frota Segura.vehicle_id: UUID do veículo no Frota Segura.plate: placa atual, normalizada sem espaços ou hífen.
A identidade única é company_id + vehicle_id. A placa não identifica isoladamente um veículo e pode aparecer no histórico de empresas ou veículos diferentes.
5. Solicitar consulta de um veículo
POST /api/v1/consultas
Content-Type: application/json
X-API-Key: CHAVE_FORNECIDA_PELA_MSOLUTIONS
{
"company_id": "11111111-1111-4111-8111-111111111111",
"vehicle_id": "22222222-2222-4222-8222-222222222222",
"plate": "CPA0C46"
}
Resposta HTTP 202:
{
"lote_id": "a15ae39e-3c35-4bc1-a82b-94c906fdd751",
"status": "recebido",
"quantidade": 1
}
6. Solicitar consulta em lote
{
"company_id": "11111111-1111-4111-8111-111111111111",
"vehicles": [
{
"vehicle_id": "22222222-2222-4222-8222-222222222222",
"plate": "CPA0C46"
},
{
"vehicle_id": "33333333-3333-4333-8333-333333333333",
"plate": "ABC1D23"
}
]
}
Regras: mínimo de 1 e máximo de 500 veículos; todos pertencem ao company_id do envelope; vehicle_id não pode se repetir no mesmo lote; não misture o formato unitário com vehicles.
7. Acompanhar um lote
GET /api/v1/consultas/{lote_id}
X-API-Key: CHAVE_FORNECIDA_PELA_MSOLUTIONS
Estados do lote: recebido, processando, concluido, concluido_parcialmente e erro.
Estados individuais: aguardando, aguardando_horario_operacional, processando, concluida, sem_multas, nova_tentativa, erro e bloqueada.
O consumidor deve consultar com intervalo recomendado de 15 a 30 segundos e parar quando o lote atingir um estado final.
8. Recuperar multas
Para listar multas de um veículo, obtenha primeiro o campo interno id em GET /api/v1/veiculos e consulte:
GET /api/v1/veiculos/{id_interno_do_veiculo}/multas
Para integração incremental, prefira:
GET /api/v1/multas/pendentes?limit=500
Esse endpoint retorna somente multas com retorno_enviado=false.
Exemplo abreviado:
[
{
"multa_id": "9db3a23d-23ec-4a67-9c2e-623165f8fb84",
"veiculo_id": "id-interno-do-veiculo",
"numero_auto_infracao": "E436010296",
"placa_retornada_portal": "CPA0246",
"codigo_orgao_autuador": "264770",
"orgao_autuador": "GUARULHOS",
"codigo_infracao": "6050",
"descricao_infracao": "AVANCAR SINAL VERMELHO DO SEMAFORO",
"data_infracao": "2026-06-19",
"hora_infracao": "13:14:00",
"valor_infracao_centavos": 29347,
"exigivel": false,
"retorno_enviado": false,
"enviado_em": null
}
]
A placa retornada pelo portal pode divergir da placa consultada por conversão entre o padrão antigo e o padrão Mercosul. Isso não deve ser tratado isoladamente como erro.
9. Confirmar recebimento
POST /api/v1/multas/{multa_id}/marcar-enviada
X-API-Key: CHAVE_FORNECIDA_PELA_MSOLUTIONS
A operação é idempotente. Ela define retorno_enviado=true e grava enviado_em. Repetir a chamada não cria duplicidade.
10. Principais campos de multa
Identificação
multa_id: identificador interno da multa.veiculo_id: identificador interno do veículo na MSolutions.consulta_id: consulta que encontrou a multa.id_consulta_portal: identificador da consulta no DespaDoc.placa_retornada_portal: placa apresentada pelo portal.numero_auto_infracao: número único do auto de infração.
Notificação
codigo_orgao_autuador,orgao_autuador,uf_orgao_autuador.codigo_infracao,descricao_infracao.uf_emplacamento,local_infracao,data_infracao,hora_infracao.data_cadastramento_infracao,codigo_municipal_infracao,tipo_auto_infracao.medicao_real,limite_permitido,medicao_considerada,unidade_medida.valor_infracao_centavos: valor monetário inteiro em centavos.exigivel:true,falseounullquando o portal não informar.uf_jurisdicao_veiculo,codigo_municipal_emplacamento.codigo_marca_modelo,marca_modelo_veiculo.data_notificacao,data_emissao_penalidade.
Pagamento, suspensão e auditoria
uf_pagamento,data_pagamento,valor_pago_centavos,data_registro_pagamento.tipo_suspensao_cancelamento,data_registro_suspensao_cancelamento,origem_suspensao_cancelamento,aceite_uf_jurisdicao.data_realizacao_consulta_portal,hora_realizacao_consulta_portal.dados_originais: retorno integral preservado para auditoria.retorno_enviado,encontrado_em,enviado_em.
Campos não informados pelo DespaDoc são retornados como null. Datas usam AAAA-MM-DD, horários usam HH:MM:SS e datas/hora de auditoria usam ISO 8601.
11. Códigos HTTP
200 OK: leitura ou confirmação concluída.201 Created: veículo cadastrado ou reativado.202 Accepted: lote aceito para processamento assíncrono.401 Unauthorized:X-API-Keyausente ou inválida.404 Not Found: lote, veículo, multa ou rota inexistente.409 Conflict: conflito ao cadastrar veículo.422 Unprocessable Entity: JSON, UUID, placa ou quantidade inválida.503 Service Unavailable: banco de dados ou Redis indisponível no teste de prontidão.
12. Segurança e operação
- Use HTTPS fora do computador local.
- Nunca envie a chave na URL ou no corpo JSON.
- Não registre a chave em logs e não a versione em repositórios.
- Configure timeout de conexão e leitura no consumidor.
- Trate HTTP 202 como aceite, não como conclusão da consulta.
- Requisições podem chegar 24 horas por dia; o robô inicia pesquisas apenas na janela operacional.
- A API evita duplicidade de multas pelo conteúdo e pelo número do auto disponível.
13. Recursos entregues
- Swagger:
/docs - Esquema OpenAPI:
/openapi.json - Collection Postman:
MSolutions_Multas_API.postman_collection.json - Ambiente Postman:
MSolutions_Multas_API_Local.postman_environment.json
14. Webhook de multas
A API possui estrutura persistente e fila separada para notificar cada multa nova. O destino homologado é https://political-infant-electro-rand.trycloudflare.com/api/integrations/webhooks/msolutions/infractions/.
Configurar o destino da empresa
PUT /api/v1/empresas/{company_id}/webhook
X-API-Key: CHAVE_FORNECIDA_PELA_MSOLUTIONS
Content-Type: application/json
{
"url": "https://political-infant-electro-rand.trycloudflare.com/api/integrations/webhooks/msolutions/infractions/",
"token": "TOKEN_CONFIGURADO",
"ativo": true
}
O token não é devolvido pela API e não deve ser registrado em logs.
Contrato do evento
{
"event_id": "uuid-do-evento",
"infraction_id": "uuid-da-multa",
"multa_id": "uuid-da-multa",
"company_id": "uuid-da-empresa",
"vehicle_id": "uuid-do-veiculo-no-frota-segura",
"data_infracao": "2026-07-20",
"plate": "ABC1D23",
"agency": "264770 - GUARULHOS",
"occurred_at": "2026-07-20T10:15:00-03:00",
"notice_number": "A123456789",
"code": "74550",
"description": "Descrição da infração",
"amount": "195.23",
"location": "Av. Exemplo, km 10",
"points": null,
"notification_date": "2026-07-25",
"identification_deadline": null,
"defense_deadline": null,
"payment_due_date": null
}
Cada requisição envia X-Webhook-Token: TOKEN_CONFIGURADO. Sem o token correto, o Frota Segura responde HTTP 401.
O campo multa_id identifica a multa na MSolutions; infraction_id permanece como alias de compatibilidade. Os campos company_id e vehicle_id preservam os identificadores recebidos do Frota Segura. data_infracao usa o formato AAAA-MM-DD; occurred_at mantém a data e hora com fuso horário.
Os eventos possuem estados aguardando_configuracao, pendente, enviando, nova_tentativa, enviado e falhou. Somente uma resposta HTTP entre 200 e 299 marca a multa como retorno_enviado=true. Falhas geram novas tentativas com intervalo progressivo e ficam registradas para auditoria.
Endpoints auxiliares:
GET /api/v1/empresas/{company_id}/webhookGET /api/v1/webhooks/eventosPOST /api/v1/webhooks/eventos/{evento_id}/reenviar
O parâmetro legado callback_url do lote permanece reservado e não substitui o cadastro seguro por empresa nesta etapa.