Manual da API · Webhooks
Cria um assinante de webhook e devolve o segredo uma vez (só ADMIN)
POST/v1/integracoes/webhooks
Perfil ADMIN. O segredo vem só nesta resposta. Endereço interno é recusado. O perfil EMBARCADOR não acessa esta rota.
Rota de administrador. Usa a sessão do portal em Authorization: Bearer; o TMS não a chama com a chave de API.
Parâmetros
Cabeçalhos (header)
AuthorizationtextoobrigatórioSessão do administrador no portal:
Bearerseguido do token. Rota de administrador; o TMS não a chama com a chave de API.Content-TypetextoobrigatórioSempre
application/json.
Corpo (body) · application/json
nometextoobrigatóriode 1 a 120 caracteres
ambientetexto (lista fixa)opcionalDesde a 0.21.0. Ambiente do assinante; não muda depois de criado. Em
PRODUCAOa url precisa ser https.httpe endereço local só valem emTESTE. Na atualização, omitido mantém o atual.Valores:
TESTE,PRODUCAO; padrão: "PRODUCAO"urltextoobrigatórioEndereço público HTTPS. Endereço interno é recusado.
tiposlista de texto (lista fixa)obrigatórioValores:
parada.chegada,parada.saida,baixa.registrada,ocorrencia.registrada,comprovante.emitido,evento_cte.estado_alterado,posicao.lote,veiculo.km_registrado; ao menos 1 item(ns)papeltexto (lista fixa)obrigatórioValores:
TMS,TERCEIROescopoCnpjslista de textoopcionalRaízes de 8 caracteres. Obrigatório quando papel é TERCEIRO. PDF e canhoto só saem se o terceiro for o tomador.
cadenciaPosicaoMintexto (lista fixa)opcionalSó para papel TMS e tipo posicao.lote. Embarcador e destinatário não recebem posição.
Valores:
5,10,15contatoEmailtextoobrigatórioDado pessoal. Não registrar em log.
até 320 caracteres
Exemplos de corpo
{
"nome": "texto",
"ambiente": "PRODUCAO",
"url": "https://exemplo.com.br/webhook-veltra",
"tipos": [
"parada.chegada"
],
"papel": "TMS",
"escopoCnpjs": [
"texto"
],
"cadenciaPosicaoMin": 5,
"contatoEmail": "texto"
}Respostas
201application/json
Assinante criado; o segredo aparece uma única vez
{
"assinante": {
"nome": "texto",
"ambiente": "PRODUCAO",
"url": "https://exemplo.com.br/webhook-veltra",
"tipos": [
"parada.chegada"
],
"papel": "TMS",
"escopoCnpjs": [
"texto"
],
"cadenciaPosicaoMin": 5,
"contatoEmail": "texto",
"id": "0192f3a4-5b6c-7d8e-9f01-23456789abcd",
"situacao": "ATIVO",
"criadoEm": "2026-11-06T09:15:00-03:00",
"segredoAlteradoEm": "2026-11-06T09:15:00-03:00"
},
"segredo": "texto"
}Campos da resposta (14)
Campos
assinanteobjetoobrigatórioassinante.nometextoobrigatóriode 1 a 120 caracteres
assinante.ambientetexto (lista fixa)opcionalDesde a 0.21.0. Ambiente do assinante; não muda depois de criado. Em
PRODUCAOa url precisa ser https.httpe endereço local só valem emTESTE. Na atualização, omitido mantém o atual.Valores:
TESTE,PRODUCAO; padrão: "PRODUCAO"assinante.urltextoobrigatórioEndereço público HTTPS. Endereço interno é recusado.
assinante.tiposlista de texto (lista fixa)obrigatórioValores:
parada.chegada,parada.saida,baixa.registrada,ocorrencia.registrada,comprovante.emitido,evento_cte.estado_alterado,posicao.lote,veiculo.km_registrado; ao menos 1 item(ns)assinante.papeltexto (lista fixa)obrigatórioValores:
TMS,TERCEIROassinante.escopoCnpjslista de textoopcionalRaízes de 8 caracteres. Obrigatório quando papel é TERCEIRO. PDF e canhoto só saem se o terceiro for o tomador.
assinante.cadenciaPosicaoMintexto (lista fixa)opcionalSó para papel TMS e tipo posicao.lote. Embarcador e destinatário não recebem posição.
Valores:
5,10,15assinante.contatoEmailtextoobrigatórioDado pessoal. Não registrar em log.
até 320 caracteres
assinante.idtexto (uuid)obrigatórioassinante.situacaotexto (lista fixa)obrigatórioValores:
ATIVO,PAUSADO,COM_FALHAS,DESATIVADOassinante.criadoEmtexto (data e hora ISO 8601)opcionalassinante.segredoAlteradoEmtexto (data e hora ISO 8601)opcionalsegredotextoobrigatórioExibido uma única vez. Não registrar em log.
Erroapplication/problem+json
Erro no formato RFC 9457 (application/problem+json)
{
"type": "https://veltra.com.br/problemas/validacao",
"title": "Requisição inválida",
"status": 400,
"detail": "O campo cpf é obrigatório",
"instance": "https://exemplo.com.br/webhook-veltra",
"codigo": "TERMO_NAO_ACEITO"
}Campos da resposta (6)
Campos
typetextoobrigatóriotitletextoobrigatóriostatusinteiroobrigatóriodetailtextoopcionalinstancetextoopcionalcodigotextoopcionalCódigo estável do problema para o cliente decidir o tratamento (ex.: TERMO_NAO_ACEITO, RETENCAO_MENOR_QUE_MINIMA, REAUTENTICACAO_NECESSARIA). Ausente quando o erro não tem código próprio.