Quem é você. Você opera praças de pedágio com cancela física — a cobrança ocorre no ato da passagem, com identificação do veículo por OCR, RFID ou apresentação do transponder. Cancela só libera com pagamento autorizado.
Problema. Motoristas sem dinheiro em espécie ou com transponder inativo causam fila e atrito operacional. Integrar cada adquirente individualmente é caro — e pagamento manual no guichê é lento demais para o fluxo da praça.
Solução Movvia. Você publica a cobrança no momento da passagem com TTL curto. A rede de canais (totem na própria praça, app de carteira do motorista, portal oficial) reserva e confirma em segundos. Você recebe o sinal de pagamento confirmado com nsu, txid e origemLiquidacao para liberar a cancela.
- Cobrança publicada no instante da identificação do veículo, com TTL configurado no onboarding (típico: 90s para fluxo de cancela; até 48h se tolerar pagamento pós-passagem).
- Reserva atômica: enquanto um canal estiver tentando pagar, nenhum outro pode interferir — sem cobrança duplicada.
- Confirmação de pagamento traz
metodoPagamentoeorigemLiquidacaoem tempo real, suficiente para automatizar a liberação da cancela. - Cobranças não pagas no TTL voltam ao seu fluxo pós-pago tradicional, com histórico das tentativas.
Cada passagem na barreira passa pelos mesmos 3 pontos de integração — só o tempo entre eles muda (segundos em vez de dias).
Sua estação de identificação (OCR no pórtico de entrada, leitura de transponder ou guichê) publica a cobrança imediatamente:
POST /ec-api/v1/passagens
Authorization: Basic {credencial_ec}
x-ec-id: {ec_id}
Content-Type: application/json
Idempotency-Key: BARREIRA-2026-00441
{
"referenciaExterna": "BARREIRA-2026-00441",
"placa": "XYZ9W87",
"valor": 8.20,
"tipo": "BARREIRA",
"praca": {
"id": "dutra-003",
"nome": "Praça 3 — Via Dutra KM 132",
"sentido": "SP-RJ"
},
"categoria": 2,
"categoriaDescricao": "Veículo comercial 2 eixos",
"capturadoEm": "2026-04-23T11:17:04Z",
"ttl": 90,
"cancelaId": "cancela-3-faixa-2"
}Resposta 201 Created:
{
"passagemId": "01JVZA1G8K7M2N5P3Q6R9T8X4B",
"status": "PENDENTE",
"expiresAt": "2026-04-23T11:18:34Z",
"criadaEm": "2026-04-23T11:17:04Z"
}Notas:
ttlem segundos. Após esse prazo a cobrança expira automaticamente; configure conforme seu modo de operação (90para liberação síncrona;172800= 48h para pós-pago).cancelaIdopcional: se enviado, é incluído nos webhooks subsequentes para você direcionar o sinal de liberação para a cancela correta.valorem reais com 2 decimais (mesma convenção da API Parceiros).
Em segundos, um canal autorizado tenta pagar. Você recebe webhook informando o lock — útil para mostrar "processando" no painel da praça e travar tentativa concorrente:
POST {sua_url_webhook}
x-movvia-signature: <hmac-sha256-do-payload-bruto>
Content-Type: application/json
{
"evento": "pe.passagem.reservada",
"versao": "2",
"id": "evt_2b3c4d5e6f7a",
"timestamp": "2026-04-23T11:17:08Z",
"ecId": "ec_dutra_concessionaria",
"dados": {
"passagemId": "01JVZA1G8K7M2N5P3Q6R9T8X4B",
"referenciaExterna": "BARREIRA-2026-00441",
"placa": "XYZ9W87",
"reservaId": "a78bc92d-1f3e-4c45-9012-bd56fa8e7c91",
"cancelaId": "cancela-3-faixa-2",
"valor": 8.20,
"expiresAt": "2026-04-23T11:18:34Z",
"canal": {
"tipo": "TOTEM",
"id": "totem-dutra-003-frente",
"nome": "Totem Dutra Praça 3"
}
}
}Notas:
- Para pedágio de barreira,
expiresAtda reserva =expiresAtda cobrança (ambos terminam no fim do TTL). Não há renovação. - Se o canal não confirmar dentro do TTL, você recebe
pe.passagem.expirada— fluxo manual no guichê. cancelaId(se foi enviado no passo 1) está incluído no payload para você correlacionar com a cancela física.
Confirmação chega tipicamente em segundos. Esse é o sinal para liberar a cancela:
POST {sua_url_webhook}
x-movvia-signature: <hmac-sha256-do-payload-bruto>
Content-Type: application/json
{
"evento": "pe.passagem.paga",
"versao": "2",
"id": "evt_4f5a6b7c8d9e",
"timestamp": "2026-04-23T11:17:13Z",
"ecId": "ec_dutra_concessionaria",
"dados": {
"passagemId": "01JVZA1G8K7M2N5P3Q6R9T8X4B",
"referenciaExterna": "BARREIRA-2026-00441",
"reservaId": "a78bc92d-1f3e-4c45-9012-bd56fa8e7c91",
"cancelaId": "cancela-3-faixa-2",
"valor": 8.20,
"valorRepasseLiquido": 7.96,
"comprovante": {
"nsu": "000089432101",
"txid": "TOT20260423111712CD9F8B2A",
"metodoPagamento": "PIX",
"origemLiquidacao": "TOTEM",
"canalId": "totem-dutra-003-frente",
"pagoEm": "2026-04-23T11:17:12Z"
},
"protocoloMovvia": "MV-2026-04-23-00118"
}
}Campos de dados.comprovante:
| Campo | Descrição |
|---|---|
nsu | Número Sequencial Único do pagamento (gerado pelo adquirente / arranjo de pagamento) |
txid | Identificador da transação no canal (PIX EndToEnd ID, autorização do cartão, etc.) |
metodoPagamento | PIX, CARTAO_CREDITO, CARTAO_DEBITO ou DINHEIRO |
origemLiquidacao | Onde o motorista pagou: PORTAL (portal oficial Movvia), TOTEM (terminal físico na praça) ou PARCEIRO (app de carteira/banco/frota) |
canalId | ID do canal específico dentro da origem |
pagoEm | Timestamp UTC do pagamento |
Regra operacional para liberação síncrona da cancela:
- Receber
pe.passagem.paga. - Validar
x-movvia-signature(HMAC) antes de processar — descarte payloads não assinados. - Verificar que
dados.cancelaIdcorresponde à faixa que está aguardando. - Acionar abertura da cancela. Tempo total típico Movvia → seu sistema → cancela: < 1 segundo após confirmação.
Convenção dos eventos
pe.<modulo>.<acao>é a mesma da API Parceiros: envelope{evento, versao, id, timestamp, ecId}+ blocodadosespecífico. Ver Webhooks Parceiros para retry, HMAC e idempotência.
valorRepasseLiquido é repassado em D+0 — relevante para barreira porque o caixa operacional da praça precisa fechar todo dia. A taxa Movvia varia conforme metodoPagamento (PIX no totem é a mais barata; cartão de crédito é a mais cara) e origemLiquidacao (TOTEM costuma ser plano dedicado).
- TTL curto exige resposta rápida do parceiro/totem. Canais com latência média acima do TTL são despriorizados pela Movvia automaticamente — operação saudável da praça é prioridade.
- Atomicidade. Cada cobrança de barreira gera no máximo 1 reserva ativa. Não há agrupamento por placa em barreira — diferente de free flow.
- Estorno. Se a cancela falhar após
pe.passagem.paga(ex.: defeito mecânico, motorista forçou), abra um ticket via endpoint de reversão; a Movvia notifica o canal para estorno ao motorista. Esse fluxo é exceção, não rotina.
- Publicar primeira cobrança — tutorial passo-a-passo em sandbox.
- Validar webhooks com HMAC — assinatura obrigatória de
pe.passagem.*. - Idempotência — como tratar reenvios de webhooks no fluxo de cancela.