Pular para o conteúdo
Veltra Ajuda
Manual da APIPlaybookEntrar

Manual da API · Entrada do TMS

Envia um manifesto novo (entrega, coleta ou transferência)

POST/integracao/v1/manifestos

Um manifesto por chamada. A idempotência usa o cabeçalho Idempotency-Key (obrigatório) mais a chave natural numeroExterno (número do manifesto no TMS):

  • mesma Idempotency-Key e mesmo corpo = devolve a mesma resposta da primeira chamada, sem duplicar nada;

  • mesma Idempotency-Key com corpo diferente = 409;

  • numeroExterno que já existe (com outra Idempotency-Key) = 409; para alterar um manifesto já enviado use o PUT (reenvio completo).

O manifesto é gravado no ambiente da API key: chave de TESTE grava manifesto de sandbox (ambiente=TESTE), que nunca vai para o app de motoristas reais, nunca dispara webhook de produção, não faz upsert de motorista/veículo no cadastro real e é expurgado depois de ~30 dias. Idempotência, chave natural e vínculo de documentos são isolados por ambiente. Erros de cabeçalho do manifesto (tipo ausente, CPF do motorista inválido, filial de transferência inexistente etc.) recusam a chamada inteira com 400. Erros de um documento específico (chave com dígito verificador errado, CT-e sem chave) recusam só aquele documento: o restante é gravado e a resposta traz o motivo em erros[], apontando o índice do documento no array documentos. As paradas são montadas agrupando os documentos por destinatário (CNPJ/CPF) + endereço, na ordem em que aparecem no manifesto. Sem latitude/longitude, o endereço é geocodificado em segundo plano; a resposta não espera a geocodificação.

Para que serve: envia um manifesto novo, em uma chamada, com todos os documentos.

Quando chamar: quando o TMS fechar a viagem e o motorista estiver para sair. O Veltra monta as paradas sozinho, agrupando os documentos por destinatário (CNPJ ou CPF) mais endereço, na ordem em que aparecem em documentos.

Parâmetros

Cabeçalhos (header)

  • X-Veltra-Api-Keytextoobrigatório

    Chave de API do TMS. Emitida na tela Chaves de API do portal; o valor completo aparece uma única vez.

  • Idempotency-Keytextoobrigatório

    Chave de idempotência gerada pelo TMS (recomendado: UUID) por tentativa lógica de envio. Guardada por pelo menos 72 h, isolada por transportadora e ambiente. Repetir a mesma chave com o mesmo corpo devolve a resposta original; com corpo diferente = 409.

    de 1 a 255 caracteres

  • Content-Typetextoobrigatório

    Sempre application/json.

Corpo (body) · application/json

  • tipotexto (lista fixa)obrigatório

    Tipo do manifesto enviado pelo TMS. Use ROTA para o caminhão que sai com entregas e coletas juntas e TRANSFERENCIA para transferência entre filiais (sempre só transferência). ENTREGA e COLETA seguem aceitos por compatibilidade e são tratados como ROTA.

    Valores: ROTA, TRANSFERENCIA, ENTREGA, COLETA

  • numeroExternotextoobrigatório

    Número do manifesto/relatório no TMS. Chave natural, única por transportadora e ambiente.

    de 1 a 60 caracteres

  • motoristaobjetoobrigatório

    Motorista ou ajudante citado no manifesto.

  • motorista.cpftextoobrigatório

    CPF com ou sem máscara (11 dígitos), validado pelos dígitos verificadores.

  • motorista.nometextoobrigatório

    até 200 caracteres

  • veiculoobjetoobrigatório
  • veiculo.placatextoobrigatório

    Placa de tração (padrão antigo ou Mercosul), com ou sem hífen. Chave de upsert do veículo.

  • ajudanteslista de objetosopcional

    Até 2 ajudantes (nome + CPF). Não são usuários do app, só dados do manifesto.

    até 2 itens

  • ajudantes[].cpftextoobrigatório

    CPF com ou sem máscara (11 dígitos), validado pelos dígitos verificadores.

  • ajudantes[].nometextoobrigatório

    até 200 caracteres

  • filialOrigemSiglatextoopcional

    siglaExterna da filial de origem. Obrigatória quando tipo=TRANSFERENCIA; sigla desconhecida = 400.

  • filialDestinoSiglatextoopcional

    siglaExterna da filial de destino. Obrigatória quando tipo=TRANSFERENCIA.

  • chaveMdfetextoopcional

    Chave de acesso de 44 posições (NF-e, CT-e ou MDF-e). As 12 primeiras posições do CNPJ de quem emitiu o documento fiscal podem ser letras maiúsculas (CNPJ alfanumérico, em vigor desde 01/07/2026); o resto é numérico. O dígito verificador e o modelo são conferidos.

    de 44 a 44 caracteres; padrão ^[0-9]{6}[0-9A-Z]{12}[0-9]{26}$

  • quantidadePaletesinteiroopcional

    Quantidade de paletes informada no manifesto.

    mínimo 0

  • documentoslista de objetosobrigatório

    ao menos 1 item(ns)

  • documentos[].modelotexto (lista fixa)obrigatório

    Modelo do documento fiscal: 55 = NF-e, 57 = CT-e, 58 = MDF-e. Nos documentos do manifesto o normal é 57 (CT-e) ou 55 (NF-e, ex.: coleta sem CT-e); a chave do MDF-e do próprio manifesto vai em chaveMdfe.

    Valores: 55, 57, 58

  • documentos[].chavetextoopcional

    Chave de acesso de 44 posições (NF-e, CT-e ou MDF-e). As 12 primeiras posições do CNPJ de quem emitiu o documento fiscal podem ser letras maiúsculas (CNPJ alfanumérico, em vigor desde 01/07/2026); o resto é numérico. O dígito verificador e o modelo são conferidos.

    de 44 a 44 caracteres; padrão ^[0-9]{6}[0-9A-Z]{12}[0-9]{26}$

  • documentos[].numerotextoobrigatório

    até 20 caracteres

  • documentos[].serietextoopcional

    até 10 caracteres

  • documentos[].cnpjTransportadoratextoopcional

    CNPJ da transportadora que emitiu o CT-e (só faz sentido em modelo=57). Opcional: ausente, o Veltra usa o CNPJ da chave (posições 7 a 20). Se vier, é usado como enviado, sem checar contra a chave. Com ou sem máscara.

  • documentos[].cnpjEmbarcadortextoopcional

    CNPJ do embarcador, dono/emitente da NF (para modelo diferente de 57; obrigatório nesses casos). No CT-e não é usado: a chave já identifica o documento. Com ou sem máscara.

  • documentos[].tomadorCnpjtextoopcional

    Opcional e aditivo (só modelo=57). CNPJ de quem paga o frete (tomador do CT-e), numérico ou alfanumérico, com ou sem máscara. Ausente, nenhum terceiro recebe PDF nem canhoto.

  • documentos[].tarefatexto (lista fixa)opcional

    O que o motorista faz com o documento na parada. Coleta e entrega no mesmo cliente e no mesmo manifesto ficam na mesma parada, com as duas tarefas.

    Valores: ENTREGA, COLETA

  • documentos[].embarcadorobjetoopcional

    Embarcador da mercadoria (opcional); quem embarca a mercadoria (cliente da transportadora).

  • documentos[].embarcador.cnpjCpftextoobrigatório
  • documentos[].embarcador.nometextoopcional
  • documentos[].destinatarioobjetoobrigatório
  • documentos[].destinatario.cnpjCpftextoobrigatório

    CNPJ (numérico ou alfanumérico) ou CPF do destinatário/recebedor, com ou sem máscara. Obrigatório: agrupa as paradas e identifica o link do destinatário.

  • documentos[].destinatario.nometextoobrigatório

    até 200 caracteres

  • documentos[].destinatario.enderecoobjetoobrigatório

    Endereço de entrega/coleta do destinatário. Junto com o CNPJ/CPF, define a parada.

  • documentos[].destinatario.endereco.logradourotextoobrigatório
  • documentos[].destinatario.endereco.numerotextoopcional
  • documentos[].destinatario.endereco.complementotextoopcional
  • documentos[].destinatario.endereco.bairrotextoopcional
  • documentos[].destinatario.endereco.municipiotextoobrigatório
  • documentos[].destinatario.endereco.uftextoobrigatório

    de 2 a 2 caracteres

  • documentos[].destinatario.endereco.ceptextoopcional

    Só dígitos ou com hífen.

  • documentos[].destinatario.emailtextoopcional

    Opcional. E-mail do destinatário para o aviso da entrega. Dado pessoal: não registrar em log. Ausente, o destinatário acompanha pelo link copiado no portal ou pela chave da NF.

    até 320 caracteres

  • documentos[].nfVinculadaslista de objetosopcional

    NF transportadas quando o documento é um CT-e (1 ou mais). Vazio/omitido nos demais modelos.

  • documentos[].nfVinculadas[].chavetextoopcional

    Chave de acesso de 44 posições (NF-e, CT-e ou MDF-e). As 12 primeiras posições do CNPJ de quem emitiu o documento fiscal podem ser letras maiúsculas (CNPJ alfanumérico, em vigor desde 01/07/2026); o resto é numérico. O dígito verificador e o modelo são conferidos.

    de 44 a 44 caracteres; padrão ^[0-9]{6}[0-9A-Z]{12}[0-9]{26}$

  • documentos[].nfVinculadas[].numerotextoobrigatório

    até 20 caracteres

  • documentos[].nfVinculadas[].serietextoopcional

    até 10 caracteres

  • documentos[].nfVinculadas[].cnpjEmbarcadortextoobrigatório

    CNPJ do embarcador (emitente da NF), numérico ou alfanumérico, com ou sem máscara.

  • documentos[].nfVinculadas[].valornúmeroopcional

    Valor da NF em reais, para exibição na torre; não é usado em cálculo (desde a 0.4.0).

    mínimo 0

  • documentos[].nfVinculadas[].nfeEmitidoEmtexto (data e hora ISO 8601)opcional

    Opcional. Data e hora de emissão da NF-e. Sem a data base escolhida pela transportadora, o prazo conta da chegada do manifesto ao Veltra. prazoEntrega no documento continua aceito.

  • documentos[].volumesinteiroopcional

    mínimo 0

  • documentos[].pesonúmeroopcional

    Peso em kg.

    mínimo 0

  • documentos[].valornúmeroopcional

    Valor do documento em reais, para exibição na torre; não é usado em cálculo (desde a 0.4.0).

    mínimo 0

  • documentos[].prazoEntregatexto (data AAAA-MM-DD)opcional

    Prazo de entrega, quando houver. Continua aceito. Sem a data base escolhida pela transportadora (cteEmitidoEm, nfeEmitidoEm ou este campo), o prazo conta da chegada do manifesto ao Veltra.

  • documentos[].cteEmitidoEmtexto (data e hora ISO 8601)opcional

    Opcional. Data e hora de emissão do CT-e. Sem a data base escolhida pela transportadora, o prazo conta da chegada do manifesto ao Veltra. prazoEntrega continua aceito.

  • documentos[].latitudenúmeroopcional

    Opcional. Se vier junto com longitude, é usada direto na parada; senão o endereço é geocodificado em segundo plano.

    de -90 a 90

  • documentos[].longitudenúmeroopcional

    de -180 a 180

  • documentos[].protocoloAutorizacaotextoopcional

    Opcional e aditivo (só modelo=57). Protocolo de autorização do CT-e (nProt, 15 dígitos, do protCTe). Necessário ao perfil Comprovante Digital Homologado (evento 110180). Sem ele, o evento do CT-e fica PENDENTE_DE_DADOS no portal; a entrega continua sendo comprovada pelo comprovante interno do Veltra. Clientes que não enviam o campo seguem funcionando como antes.

    padrão ^[0-9]{15}$

  • documentos[].tipoServicotexto (lista fixa)opcional

    Opcional e aditivo (só modelo=57). Tipo de serviço do CT-e (tpServ): NORMAL (0), SUBCONTRATACAO (1), REDESPACHO (2), REDESPACHO_INTERMEDIARIO (3), SERVICO_VINCULADO_MULTIMODAL (4). O evento 110180 só lista as NF-e entregues em CT-e NORMAL.

    Valores: NORMAL, SUBCONTRATACAO, REDESPACHO, REDESPACHO_INTERMEDIARIO, SERVICO_VINCULADO_MULTIMODAL

  • documentos[].globalizadoverdadeiro/falsoopcional

    Opcional e aditivo (só modelo=57). CT-e globalizado (a SEFAZ admite mais de um comprovante para ele). Omitido = não globalizado.

    padrão: false

Exemplos de corpo

{
  "tipo": "ENTREGA",
  "numeroExterno": "REL-2026-000123",
  "motorista": {
    "cpf": "529.982.247-25",
    "nome": "Motorista Exemplo da Silva"
  },
  "veiculo": {
    "placa": "ABC1D23"
  },
  "ajudantes": [
    {
      "cpf": "111.444.777-35",
      "nome": "Ajudante Exemplo"
    }
  ],
  "chaveMdfe": "35260911222333000181580010000007891273645188",
  "quantidadePaletes": 4,
  "documentos": [
    {
      "modelo": 57,
      "chave": "35260911222333000181570010000123451482135762",
      "numero": "12345",
      "serie": "1",
      "cnpjTransportadora": "11222333000181",
      "embarcador": {
        "cnpjCpf": "12ABC34501DE35",
        "nome": "Indústria Exemplo S.A."
      },
      "destinatario": {
        "cnpjCpf": "11444777000161",
        "nome": "Mercado Exemplo Ltda",
        "endereco": {
          "logradouro": "Rua das Flores",
          "numero": "120",
          "bairro": "Centro",
          "municipio": "Campinas",
          "uf": "SP",
          "cep": "13010-000"
        }
      },
      "nfVinculadas": [
        {
          "chave": "35260912ABC34501DE35550010000456781555123454",
          "numero": "45678",
          "serie": "1",
          "cnpjEmbarcador": "12ABC34501DE35"
        }
      ],
      "volumes": 12,
      "peso": 350.5,
      "prazoEntrega": "2026-10-02"
    },
    {
      "modelo": 57,
      "chave": "35260911222333000181570010000123461918273641",
      "numero": "12346",
      "serie": "1",
      "cnpjTransportadora": "11222333000181",
      "destinatario": {
        "cnpjCpf": "11444777000161",
        "nome": "Mercado Exemplo Ltda",
        "endereco": {
          "logradouro": "Rua das Flores",
          "numero": "120",
          "bairro": "Centro",
          "municipio": "Campinas",
          "uf": "SP"
        }
      },
      "nfVinculadas": [
        {
          "numero": "45679",
          "serie": "1",
          "cnpjEmbarcador": "12ABC34501DE35"
        }
      ],
      "volumes": 3,
      "peso": 40
    }
  ]
}

Respostas

200application/json

Reenvio idempotente (mesma Idempotency-Key e mesmo corpo): a mesma resposta da primeira chamada, sem gravar nada de novo.

JSON
{
  "id": "0192f3a4-5b6c-7d8e-9f01-23456789abcd",
  "numeroExterno": "texto",
  "tipo": "ROTA",
  "ambiente": "TESTE",
  "versaoAtual": 1,
  "quantidadeParadas": 1,
  "quantidadeDocumentos": 1,
  "documentos": [
    {
      "id": "0192f3a4-5b6c-7d8e-9f01-23456789abcd",
      "modelo": 55,
      "chave": "texto",
      "numero": "texto",
      "serie": "texto",
      "status": "PENDENTE",
      "nfVinculadas": [
        {
          "id": "0192f3a4-5b6c-7d8e-9f01-23456789abcd",
          "chave": "texto",
          "numero": "texto",
          "serie": "texto",
          "status": "PENDENTE"
        }
      ]
    }
  ],
  "erros": [
    {
      "documentoIndex": 0,
      "codigo": "CHAVE_INVALIDA",
      "motivo": "texto",
      "chave": "texto",
      "numero": "texto"
    }
  ]
}
Campos da resposta (26)

Campos

  • idtexto (uuid)obrigatório
  • numeroExternotextoobrigatório
  • tipotexto (lista fixa)obrigatório

    Tipo do manifesto enviado pelo TMS. Use ROTA para o caminhão que sai com entregas e coletas juntas e TRANSFERENCIA para transferência entre filiais (sempre só transferência). ENTREGA e COLETA seguem aceitos por compatibilidade e são tratados como ROTA.

    Valores: ROTA, TRANSFERENCIA, ENTREGA, COLETA

  • ambientetexto (lista fixa)obrigatório

    Ambiente da credencial — sandbox e produção nunca se misturam

    Valores: TESTE, PRODUCAO

  • versaoAtualinteiroobrigatório

    Versão atual do manifesto (1 na criação; +1 a cada alteração).

    mínimo 1

  • quantidadeParadasinteiroopcional
  • quantidadeDocumentosinteiroopcional
  • documentoslista de objetosopcional

    Documentos ativos na versão atual, com o status de cada um.

  • documentos[].idtexto (uuid)obrigatório
  • documentos[].modelotexto (lista fixa)obrigatório

    Modelo do documento fiscal: 55 = NF-e, 57 = CT-e, 58 = MDF-e. Nos documentos do manifesto o normal é 57 (CT-e) ou 55 (NF-e, ex.: coleta sem CT-e); a chave do MDF-e do próprio manifesto vai em chaveMdfe.

    Valores: 55, 57, 58

  • documentos[].chavetexto ou nuloopcional
  • documentos[].numerotextoobrigatório
  • documentos[].serietexto ou nuloopcional
  • documentos[].statustexto (lista fixa)obrigatório

    Status controlado por documento, não por manifesto.

    Valores: PENDENTE, EM_TRANSPORTE, ENTREGUE, ENTREGUE_PARCIAL, DEVOLVIDO, CANCELADO

  • documentos[].nfVinculadaslista de objetosopcional

    Situação de cada NF do CT-e (o status é por NF).

  • documentos[].nfVinculadas[].idtexto (uuid)obrigatório
  • documentos[].nfVinculadas[].chavetexto ou nuloopcional
  • documentos[].nfVinculadas[].numerotextoobrigatório
  • documentos[].nfVinculadas[].serietexto ou nuloopcional
  • documentos[].nfVinculadas[].statustexto (lista fixa)obrigatório

    Status controlado por documento, não por manifesto.

    Valores: PENDENTE, EM_TRANSPORTE, ENTREGUE, ENTREGUE_PARCIAL, DEVOLVIDO, CANCELADO

  • erroslista de objetosopcional

    Documentos recusados nesta chamada. Ausente ou vazio quando tudo foi aceito.

  • erros[].documentoIndexinteiro ou nuloopcional

    Índice (a partir de 0) do documento no array documentos da requisição. Nulo quando o documento recusado não está na requisição (ex.; remoção recusada de documento já baixado).

    mínimo 0

  • erros[].codigotexto (lista fixa)obrigatório

    Motivo da recusa de um documento específico.

    Valores: CHAVE_INVALIDA, CHAVE_CTE_OBRIGATORIA, MODELO_INCOMPATIVEL, CNPJ_INVALIDO, DESTINATARIO_INVALIDO, DOCUMENTO_JA_BAIXADO, OUTRO

  • erros[].motivotextoobrigatório

    Explicação em pt-BR.

  • erros[].chavetexto ou nuloopcional

    Chave do documento, quando houver.

  • erros[].numerotexto ou nuloopcional

    Número do documento, quando houver.

201application/json

Manifesto criado (versão 1). Se algum documento foi recusado, ele aparece em erros[] e o restante foi gravado normalmente.

{
  "id": "0192f3a4-5b6c-7d8e-9f01-000000000001",
  "numeroExterno": "REL-2026-000123",
  "tipo": "ENTREGA",
  "ambiente": "PRODUCAO",
  "versaoAtual": 1,
  "quantidadeParadas": 1,
  "quantidadeDocumentos": 2,
  "erros": []
}
Campos da resposta (26)

Campos

  • idtexto (uuid)obrigatório
  • numeroExternotextoobrigatório
  • tipotexto (lista fixa)obrigatório

    Tipo do manifesto enviado pelo TMS. Use ROTA para o caminhão que sai com entregas e coletas juntas e TRANSFERENCIA para transferência entre filiais (sempre só transferência). ENTREGA e COLETA seguem aceitos por compatibilidade e são tratados como ROTA.

    Valores: ROTA, TRANSFERENCIA, ENTREGA, COLETA

  • ambientetexto (lista fixa)obrigatório

    Ambiente da credencial — sandbox e produção nunca se misturam

    Valores: TESTE, PRODUCAO

  • versaoAtualinteiroobrigatório

    Versão atual do manifesto (1 na criação; +1 a cada alteração).

    mínimo 1

  • quantidadeParadasinteiroopcional
  • quantidadeDocumentosinteiroopcional
  • documentoslista de objetosopcional

    Documentos ativos na versão atual, com o status de cada um.

  • documentos[].idtexto (uuid)obrigatório
  • documentos[].modelotexto (lista fixa)obrigatório

    Modelo do documento fiscal: 55 = NF-e, 57 = CT-e, 58 = MDF-e. Nos documentos do manifesto o normal é 57 (CT-e) ou 55 (NF-e, ex.: coleta sem CT-e); a chave do MDF-e do próprio manifesto vai em chaveMdfe.

    Valores: 55, 57, 58

  • documentos[].chavetexto ou nuloopcional
  • documentos[].numerotextoobrigatório
  • documentos[].serietexto ou nuloopcional
  • documentos[].statustexto (lista fixa)obrigatório

    Status controlado por documento, não por manifesto.

    Valores: PENDENTE, EM_TRANSPORTE, ENTREGUE, ENTREGUE_PARCIAL, DEVOLVIDO, CANCELADO

  • documentos[].nfVinculadaslista de objetosopcional

    Situação de cada NF do CT-e (o status é por NF).

  • documentos[].nfVinculadas[].idtexto (uuid)obrigatório
  • documentos[].nfVinculadas[].chavetexto ou nuloopcional
  • documentos[].nfVinculadas[].numerotextoobrigatório
  • documentos[].nfVinculadas[].serietexto ou nuloopcional
  • documentos[].nfVinculadas[].statustexto (lista fixa)obrigatório

    Status controlado por documento, não por manifesto.

    Valores: PENDENTE, EM_TRANSPORTE, ENTREGUE, ENTREGUE_PARCIAL, DEVOLVIDO, CANCELADO

  • erroslista de objetosopcional

    Documentos recusados nesta chamada. Ausente ou vazio quando tudo foi aceito.

  • erros[].documentoIndexinteiro ou nuloopcional

    Índice (a partir de 0) do documento no array documentos da requisição. Nulo quando o documento recusado não está na requisição (ex.; remoção recusada de documento já baixado).

    mínimo 0

  • erros[].codigotexto (lista fixa)obrigatório

    Motivo da recusa de um documento específico.

    Valores: CHAVE_INVALIDA, CHAVE_CTE_OBRIGATORIA, MODELO_INCOMPATIVEL, CNPJ_INVALIDO, DESTINATARIO_INVALIDO, DOCUMENTO_JA_BAIXADO, OUTRO

  • erros[].motivotextoobrigatório

    Explicação em pt-BR.

  • erros[].chavetexto ou nuloopcional

    Chave do documento, quando houver.

  • erros[].numerotexto ou nuloopcional

    Número do documento, quando houver.

400application/problem+json

Manifesto recusado por inteiro (RFC 9457). Quando o problema está em documentos específicos e nenhum documento pôde ser aceito, o membro de extensão erros lista o motivo de cada um.

{
  "type": "https://veltra.com.br/problemas/validacao",
  "title": "Requisição inválida",
  "status": 400,
  "detail": "motorista.cpf inválido"
}
Campos da resposta (12)

Campos

  • typetextoobrigatório
  • titletextoobrigatório
  • statusinteiroobrigatório
  • detailtextoopcional
  • instancetextoopcional
  • codigotextoopcional

    Código estável do problema para o cliente decidir o tratamento (ex.: ASAAS_RECUSOU, FATURA_NAO_ENCONTRADA, PAGINACAO_INVALIDA). Ausente quando o erro não tem código próprio.

  • erroslista de objetosopcional
  • erros[].documentoIndexinteiro ou nuloopcional

    Índice (a partir de 0) do documento no array documentos da requisição. Nulo quando o documento recusado não está na requisição (ex.; remoção recusada de documento já baixado).

    mínimo 0

  • erros[].codigotexto (lista fixa)obrigatório

    Motivo da recusa de um documento específico.

    Valores: CHAVE_INVALIDA, CHAVE_CTE_OBRIGATORIA, MODELO_INCOMPATIVEL, CNPJ_INVALIDO, DESTINATARIO_INVALIDO, DOCUMENTO_JA_BAIXADO, OUTRO

  • erros[].motivotextoobrigatório

    Explicação em pt-BR.

  • erros[].chavetexto ou nuloopcional

    Chave do documento, quando houver.

  • erros[].numerotexto ou nuloopcional

    Número do documento, quando houver.

401application/problem+json

Erro no formato RFC 9457 (application/problem+json)

JSON
{
  "type": "https://exemplo.com.br/webhook-veltra",
  "title": "texto",
  "status": 1,
  "detail": "texto",
  "instance": "https://exemplo.com.br/webhook-veltra",
  "codigo": "ASAAS_RECUSOU"
}
Campos da resposta (6)

Campos

  • typetextoobrigatório
  • titletextoobrigatório
  • statusinteiroobrigatório
  • detailtextoopcional
  • instancetextoopcional
  • codigotextoopcional

    Código estável do problema para o cliente decidir o tratamento (ex.: ASAAS_RECUSOU, FATURA_NAO_ENCONTRADA, PAGINACAO_INVALIDA). Ausente quando o erro não tem código próprio.

409application/problem+json

Conflito (RFC 9457): Idempotency-Key repetida com corpo diferente, numeroExterno que já existe no ambiente, ou TESTE_ENCERRADO (no campo codigo): o teste grátis da transportadora acabou e a chave de PRODUCAO não grava manifesto novo. TESTE_ENCERRADO vale só para PRODUCAO; o reenvio idempotente de um manifesto já gravado devolve o 201 gravado, sem erro. Chave de TESTE não é afetada.

JSON
{
  "type": "https://exemplo.com.br/webhook-veltra",
  "title": "texto",
  "status": 1,
  "detail": "texto",
  "instance": "https://exemplo.com.br/webhook-veltra",
  "codigo": "ASAAS_RECUSOU"
}
Campos da resposta (6)

Campos

  • typetextoobrigatório
  • titletextoobrigatório
  • statusinteiroobrigatório
  • detailtextoopcional
  • instancetextoopcional
  • codigotextoopcional

    Código estável do problema para o cliente decidir o tratamento (ex.: ASAAS_RECUSOU, FATURA_NAO_ENCONTRADA, PAGINACAO_INVALIDA). Ausente quando o erro não tem código próprio.

Erroapplication/problem+json

Erro no formato RFC 9457 (application/problem+json)

JSON
{
  "type": "https://exemplo.com.br/webhook-veltra",
  "title": "texto",
  "status": 1,
  "detail": "texto",
  "instance": "https://exemplo.com.br/webhook-veltra",
  "codigo": "ASAAS_RECUSOU"
}
Campos da resposta (6)

Campos

  • typetextoobrigatório
  • titletextoobrigatório
  • statusinteiroobrigatório
  • detailtextoopcional
  • instancetextoopcional
  • codigotextoopcional

    Código estável do problema para o cliente decidir o tratamento (ex.: ASAAS_RECUSOU, FATURA_NAO_ENCONTRADA, PAGINACAO_INVALIDA). Ausente quando o erro não tem código próprio.

Guia explicado

O que fazer: erros da chamada inteira

StatusQuandoO que fazer
400Falta o cabeçalho Idempotency-Key (detail: "cabeçalho Idempotency-Key é obrigatório")Enviar o cabeçalho
400Idempotency-Key com mais de 255 caracteresUsar um UUID
400JSON ilegível (detail: "Corpo da requisição ilegível.")Validar o JSON
400Erro de cabeçalho do manifesto: tipo ausente ou fora da lista; numeroExterno ausente; motorista ou veiculo ausentes; motorista.cpf inválido; veiculo.placa inválida; mais de 2 ajudantes; chaveMdfe inválida; documentos vazio ou acima de 1000Corrigir o campo que o detail indica
400Transferência sem filialOrigemSigla ou filialDestinoSigla, ou sigla que não existeCadastrar a filial antes (rota de filiais)
400Todos os documentos foram recusados. type termina em documentos-invalidos e erros lista o motivo de cada um. Nada foi gravadoCorrigir os documentos e reenviar
401Chave inválidaConferir a chave
403Chave sem permissão para manifesto (por exemplo, chave de consulta), ou módulo de entrada suspenso (CHAVE_SUSPENSA)Usar a chave certa
409Idempotency-Key já usada com outro corpoGerar uma chave nova, se for outro envio
409numeroExterno já existe neste ambiente (type termina em manifesto-ja-existe)Use PUT para alterar
409codigo = TESTE_ENCERRADO: o teste grátis da transportadora acabou e a chave de produção não grava manifesto novoA transportadora contrata no portal. A chave de teste não é afetada
409Conflito de gravação simultânea (type termina em conflito)Tentar de novo com a mesma Idempotency-Key
429Limite de chamadasEsperar o Retry-After

Observações

  • Idempotência. Reenvio com a mesma Idempotency-Key e o mesmo corpo devolve 200 com a resposta original e não grava nada de novo. Isso vale também depois que o teste grátis acabou: um manifesto já gravado continua devolvendo a resposta gravada.
  • Deduplicação por numeroExterno. Mandar o mesmo número com outra Idempotency-Key é 409: o Veltra entende que é um manifesto repetido e não cria outro. Para mudar um manifesto existente, use o PUT.
  • Coleta sem CT-e. O documento é a NF (modelo 55) com numero, serie e cnpjEmbarcador. O destinatario é o local onde o motorista busca. Quando o CT-e for emitido depois, ele chega em outro manifesto com as mesmas NF e o Veltra vincula sozinho.
  • Mesma parada. Documentos para o mesmo destinatário e o mesmo endereço ficam na mesma parada, cada um com a sua tarefa.
  • Teste. O manifesto de teste não chega ao app de motoristas reais nem dispara webhook de produção.
  • Limites. Até 1000 documentos, até 2 ajudantes, numeroExterno com até 60 caracteres.
  • Eventos. O Veltra não dispara webhook de manifesto; para acompanhar o andamento, assine os eventos de baixa, ocorrência e parada (veja os webhooks).

Texto completo, com mais exemplos, em API por rota.