Webhook de Faturas
POST https://seusite.com/webhook/
Através deste Webhook, o Embarcador receberá notificações sobre as faturas recebidas em Auditoria V2.
Para isso, basta disponibilizar uma URL única que receberá as requisições com os dados listados abaixo.
Cada vez que ocorrer a atualização de faturas, o webhook enviará as informações para a URL cadastrada, de acordo com as configurações definidas no Dash FR.
Envio:
Parâmetros enviados no corpo da requisição:
| Nome | Descrição | Formato / Exemplo | Informado |
|---|---|---|---|
| code | Código de negociação da Fatura via e-mail | String (UUID) | * |
| number | Número da Fatura | Inteiro | * |
| series | Série da Fatura | Inteiro | * |
| version | Versão do layout do documento | String | * |
| document_type | Tipo do documento | String | * |
| document_action | Ação referente ao documento | String | * |
| identifier | Identificador externo do documento | String | * |
| shipper | Dados do embarcador | Objeto JSON | * |
| name | Nome do embarcador | String | * |
| cnpj | CNPJ do embarcador | String (14 caracteres) | * |
| carrier | Dados da transportadora | Objeto JSON | * |
| name | Nome da transportadora | String | * |
| cnpj | CNPJ da transportadora | String (14 caracteres) | * |
| dispatcher | Dados do expedidor | Objeto JSON | * |
| dispatcher_id | ID do expedidor | Inteiro | * |
| corporate_name | Razão social do expedidor | String | * |
| dates | Datas relacionadas a Fatura | Objeto JSON | * |
| importDate | Data de importação da Fatura | DateTime (ISO 8601) | * |
| issueDate | Data de emissão da Fatura | DateTime (ISO 8601) | * |
| dueDate | Data de vencimento da Fatura | DateTime (ISO 8601) | * |
| status | Status da Fatura e Status do pagamento | Objeto JSON | * |
| invoiceStatus | Status da fatura | String (ex: released) | * |
| paymentStatus | Status do pagamento | String (ex: open) | * |
| values | Valores da Fatura | Objeto JSON | * |
| total_ctes | Quantidade total de CT-es informados na Fatura (DOCCOB) recebida | Inteiro | * |
| total_value | Valor informado diretamente na Fatura (DOCCOB) recebida | Number | * |
| total_contracted_value | Soma dos valores contratados(previsto em tabela) de todos os CT-es | Number | * |
| total_charged_ctes_value | Soma dos valores cobrados de todos os CT-es da Fatura | Number | * |
| total_divergence_value | Valor total das divergências incluídas na Fatura | Number | * |
| discount_value | Valor inserido pelo usuário durante negociação ou fechamento da Fatura | Number | * |
| total_with_discount | Valor total(fretes contratados) menos o valor do desconto aplicado na Fatura | Number | * |
| indicators | Indicadores de status dos CT-es contidos na Fatura(quantidade de ct-es contidos na fatura, divididos por status) | Objeto JSON | * |
| bankData | Dados bancários da Fatura | Objeto JSON | * |
| bankCode | Código do banco | String | * |
| bankName | Nome do banco | String | * |
| agency.number | Número da agência | String | * |
| agency.digit | Dígito da agência | String | * |
| account.number | Número da conta | String | * |
| account.digit | Dígito da conta | String | * |
| taxes | Valores das Taxas incluídas na Fatura | Objeto JSON | * |
| cfopCode | Código CFOP | String | * |
| invoice_key | Chave da nota fiscal | String | * |
| return_key | Chave de devolução | String | * |
| authorization_protocol | Protocolo de autorização | String | * |
| icms.value | Valor do ICMS | Number | * |
| iss.value | Valor do ISS | Number | * |
| ir.value | Valor do IR | Number | * |
| control.status_log | Histórico da Fatura | Array | * |
| status | Status da Fatura | String | * |
| message | Mensagem descritiva do evento (liberação, cancelamento da Fatura) | String | * |
| message_json | Mensagem complementar em JSON | String | * |
| approval_reasons_message | Motivo da realização da ação na Fatura | String | * |
| user_id | ID do usuário que realizou a ação no Dash | Inteiro | * |
| user_name | Nome do usuário que realizou a ação no Dash | String | * |
| complement | Complemento adicionado pelo usuário na hora da ação na Fatura | String | * |
| from_status | Status anterior da Fatura | String | * |
| to_status | Novo status da Fatura | String | * |
| changed_at | Data e hora da mudança/evento | DateTime ("YYYY-MM-DD HH:mm:ss") | * |
| doccob_id | ID do DocCob | Inteiro | * |
| * Informado sempre |
Exemplo de envio:
{
"code": "",
"number": 0,
"series": 0,
"version": "",
"document_type": "",
"document_action": "",
"identifier": "",
"shipper": {
"name": "",
"cnpj": ""
},
"carrier": {
"name": "",
"cnpj": ""
},
"dispatcher": {
"dispatcher_id": 0,
"corporate_name": ""
},
"dates": {
"importDate": "",
"issueDate": "",
"dueDate": ""
},
"status": {
"invoiceStatus": "",
"paymentStatus": ""
},
"values": {
"total_ctes": 0,
"total_value": 0,
"total_contracted_value": 0,
"total_charged_ctes_value": 0,
"total_divergence_value": 0,
"discount_value": 0,
"total_with_discount": 0,
"indicators": {
"total_audited_ctes": 0,
"not_linkeds_ctes": {
"total_ctes": 0,
"percentage": 0
},
"under_reviews_ctes": {
"total_ctes": 0,
"percentage": 0
},
"divergences_ctes": {
"total_ctes": 0,
"percentage": 0
},
"negotiations_ctes": {
"total_ctes": 0,
"percentage": 0
},
"pre_releaseds_ctes": {
"total_ctes": 0,
"percentage": 0
},
"releaseds_ctes": {
"total_ctes": 0,
"percentage": 0
},
"rejecteds_ctes": {
"total_ctes": 0,
"percentage": 0
},
"duplicateds_ctes": {
"total_ctes": 0,
"percentage": 0
},
"value_ctes_duplicated": 0
}
},
"bankData": {
"bankCode": "",
"bankName": "",
"agency": {
"number": "",
"digit": ""
},
"account": {
"number": "",
"digit": ""
}
},
"taxes": {
"cfop_code": "",
"invoice_key": "",
"return_key": "",
"authorizationProtocol": "",
"icms": {
"value": 0
},
"iss": {
"value": 0
},
"ir": {
"value": 0
}
},
"control": {
"status_log": []
}
}
Resposta:
- Em caso de sucesso deverá ser retornado o código de resposta HTTP 200.
Reprocessamento
- O reprocessamento automático acontece nos casos onde o status do retorno seja:
| Condição | Status |
|---|---|
| igual a | HTTP 408 |
| igual a | HTTP 429 |
| maior ou igual a | HTTP 500 |
Cada tentativa é realizada até que a API retorne um status de sucesso ou até que o número máximo de tentativas seja atingido.
O intervalo entre as tentativas de reprocessamento é relativo à tentativa anterior, ou seja, cada nova tentativa ocorre após um tempo adicional em relação à última tentativa, e não em relação ao momento de criação do webhook. O exemplo a seguir ilustra esse processo de re-tentativas, com o tempo adicional aplicado a cada nova tentativa:
- Tentativa 1: após 1 minuto (acumulado: 1 minuto)
- Tentativa 2: após 5 minutos (acumulado: 6 minutos)
- Tentativa 3: após 10 minutos (acumulado: 16 minutos)
Veja abaixo a tabela completa com as tentativas e seus respectivos tempos:
| Tentativa | Tempo |
|---|---|
| 1 | 1min |
| 2 | 2min |
| 3 | 3min |
| 4 | 5min |
| 5 | 10min |
| 6 | 30min |
| 7 | 1h |
| 8 | 2h |
| 9 | 3h |
| 10 | 4h |
| 11 | 5h |
| 12 | 8h |
- Ao solicitar o reprocessamento pelo Dash FR, caso o retorno não seja bem-sucedido, serão realizadas até 3 tentativas, todas com um intervalo de 1 minuto. As tentativas seguem a mesma lógica cumulativa utilizada no fluxo padrão, acumulando o tempo total decorrido entre elas.
| Tentativa | Tempo |
|---|---|
| 1 | 1min |
| 2 | 1min |
| 3 | 1min |