Guia da API

Fluxo de consulta, webhook e onde buscar o resultado. Referência completa no Swagger abaixo.

Ir ao Swagger

Sem código? Use a Consulta em lote

Se você não quer integrar a API, no painel existe a página Consulta em lote. Você arrasta uma planilha com uma coluna de placa (Mercosul), a gente processa e devolve o resultado em XLSX — uma linha por multa, veículos sem multa também aparecem, e o total de créditos consumidos fica no resumo.

Tem um modelo pronto pra baixar na mesma tela. A cobrança é só pelas consultas que derem certo.

Autenticação

Envie a chave em Authorization: Bearer <sua_chave> ou no header X-API-Key. Prefixos mymt_test_ (sandbox) e mymt_live_ (produção).

O que a consulta aceita

Obrigatório: licensePlate — placa Mercosul (7 caracteres alfanuméricos).

Sandbox - chave mymt_test_…

Use as placas da tabela abaixo com a api key de sandbox mymt_test_….

PlacaEsperadoNotas
MYMT01A Sem multas Veículo limpo (canal veículo simulado, lista vazia).
MYMT01B Sem multas Veículo limpo — segundo exemplo.
MYMT01C Sem multas Veículo limpo — terceiro exemplo.
MYMT01D Sem multas Veículo limpo — quarto exemplo.
MYMT02A Com multas simuladas Uma multa simulada no canal veículo.
MYMT02B Com multas simuladas Duas multas simuladas no canal veículo.
MYMT02C Com multas simuladas Uma multa simulada com mais campos preenchidos.
MYMT03A Erro simulado Falha simulada no canal veículo (ok=false).
MYMT03B Erro simulado Falha simulada no canal veículo (segundo cenário).

MYMT03A/B simulam erro na consulta; MYMT01* e MYMT02* retornam listagens vazias ou com multas fictícias.

Fazer uma consulta

Envie um POST /v1/consultas com o corpo JSON (licensePlate obrigatório). A resposta depende da sua chave:

Exemplo em produção:

curl -sS -X POST https://api.mymultas.com.br/v1/consultas \
  -H "Authorization: Bearer mymt_live_…" \
  -H "Content-Type: application/json" \
  -d '{"licensePlate":"ABC1D23"}'

No sandbox, use mymt_test_… com as placas fictícias da tabela acima.

Acompanhar o job

Com o jobId, use GET /v1/jobs/{jobId}. Quando status for completed, o corpo traz o resultado em result (lista de infrações em result.result.outcome.violations na consulta única). Se falhar, veja error.

Webhook

Configure a URL HTTPS com PATCH /v1/me/webhook (ou pela tela Webhook no painel). Quando o job termina, enviamos um POST JSON para a sua URL.

Cabeçalhos: X-Mymultas-Timestamp (Unix em segundos) e X-Mymultas-Signature no formato v1=<hex>, onde o hex é HMAC SHA256 do segredo sobre a string {timestamp}.{corpo bruto UTF-8}.

Tipos de evento:

O campo data do webhook é o mesmo objeto que vem em result na resposta de GET /v1/jobs/{jobId} (não inclui id nem status do GET).

{
  "type": "mymultas.job.completed",
  "jobId": "550e8400-e29b-41d4-a716-446655440000",
  "status": "completed",
  "createdAt": "2026-04-09T12:00:00.000Z",
  "completedAt": "2026-04-09T12:00:05.000Z",
  "error": null,
  "data": { }
}

Detalhe de cada multa

Cada item em outcome.violations tem um id (UUID). Para o texto completo da infração e campos extras RENAINF (API Brasil) em detail.renainf: GET /v1/violations/{id}/detail. Primeira chamada monta/cacheia a partir da fonte; repetições usam cache. SERPRO pode devolver 410 se a chave expirar — faça nova consulta.

Lote

POST /v1/consultas/batch aceita até 50 objetos no array items (cada um com licensePlate no mesmo formato da consulta única). A resposta traz jobId; o acompanhamento é o mesmo GET /v1/jobs/{id}.

Produção (mymt_live_…):

curl -sS -X POST https://api.mymultas.com.br/v1/consultas/batch \
  -H "Authorization: Bearer mymt_live_…" \
  -H "Content-Type: application/json" \
  -d '{"items":[
    {"licensePlate":"ABC1D23"},
    {"licensePlate":"XYZ9W87"}
  ]}'

Sandbox (mymt_test_…) com placas fictícias da tabela:

curl -sS -X POST https://api.mymultas.com.br/v1/consultas/batch \
  -H "Authorization: Bearer mymt_test_…" \
  -H "Content-Type: application/json" \
  -d '{"items":[
    {"licensePlate":"MYMT01A"},
    {"licensePlate":"MYMT02A"}
  ]}'

Swagger — referência interativa