Webhook de eventos
A API de crédito permite construir integrações a partir da assinatura de eventos públicos.
Quando um evento acontece, a API é capaz de notificar os assinantes através de um POST HTTP configurado no nosso serviço de webhooks.
É possível assinar todos ou cada um dos eventos públicos de crédito. Não existe limite de webhooks por assinantes.
Assinaturas
Ao assinar os eventos de crédito no serviço de webhooks, o assinante receberá uma chave privada confidencial. Essa chave deve ser usada para validar as notificações recebidas, para garantir que a origem da informação é confiável.
Atenção: Se o método de assinatura for pela fila de eventos ao invés do Webhook, os metadados irão vir dentro de uma estrutura maior
{
"EventName": "Payment", // Entidade
"EventVersion": 2, // Versao da entidade
"Id": "01GW11SZD6GYJF817SM6GQDTY2", // Identificador da notificação (OLID)
"EventKey": "jqtar32bh95558na2s6dxhd7f", // Identificador unico do evento
"Timestamp": "2020-04-14T17:54:10.727031Z", // Data do disparo do evento
"Metadata": { // Os dados em si do evento
// O Objeto estará aqui dentro
},
"ActionName": "Created", // O que ocorreu com a entidade
"EventSource": "CreditApi" // De onde o evento foi disparado
}
Um assinante pode configurar uma ou mais assinaturas, basta informar:
Origem do evento | Nome do serviço que originou o evento. Exemplo: "CreditApi". |
Nome do evento | Nome do evento assinado, ou wildcard ("*") para todos os eventos. Exemplo: "Proposal". |
Endereço de entrega | Endereço do endpoint para qual o POST do payload será feito. Exemplo: "http://clientapi.com/webhook". |
Códigos de resposta HTTP considerados como sucesso | Ex: 200, 201, 409 . |
Notificações
As notificações são realizadas utilizando o método POST HTTP e segue o padrão abaixo:
HTTP Header | Descrição |
---|---|
Credit-Webhook-Delivery | Chave de identificação da notificação. A chave não muda caso a mesma notificação seja enviada mais de uma vez. |
Credit-Webhook-Authorization | Valor hexadecimal criptografado. |
Credit-Webhook-Event | Nome do evento |
{
"ActionName": "Settled",
"EventName": "Loan",
"EventKey": "jrkuiop79879873987423",
"Id": "01GW11SZD6GYJF817SM6GQDTY2",
"EventVersion": 1,
"EventSource": "CreditApi",
"Timestamp": "2020-02-03T18:59:12.7436071Z",
"Metadata": { ... }
}
ActionName | Ação responsável por gerar o evento |
EventName | Tipo do evento |
EventKey | Identificador do evento |
EventVersion | Versão do schema de metadados do evento |
EventSource | Originador do evento |
Timestamp | Timestamp do evento |
Metadata | Payload do evento |
Id | Identificador da notificação, no formato OLID |
Validação de assinatura
Para validar a origem da informação o assinante deve fazer o HMAC do corpo da mensagem recebida com a função SHA256, usando a sua chave privada.
O valor resultante deve ser igual ao recebido no header Credit-Webhook-Authorization
Veja abaixo um exemplo de implementação da validação da assinatura usando .NET Core e C#
using System;
using System.Security.Cryptography;
using System.Text;
public string ComputeRequestBodySha256HashString(string requestBody, string privateKey)
{
var secret = Encoding.ASCII.GetBytes(privateKey);
var inputStream = Encoding.ASCII.GetBytes(requestBody);
using (var hasher = new HMACSHA256(secret))
{
var hash = hasher.ComputeHash(inputStream);
return $"sha256={BitConverter.ToString(hash).Replace("-", "")}";
}
}
Boas práticas de integração
Recomendamos algumas boas práticas para construir uma integração baseada em webhooks, com relação a eventuais falhas de comunicação e retentativas de envio
Idempotência | Os eventos podem ser enviados mais de uma vez para o assinante. Por este motivo é muito importante que ele esteja preparado para identificar uma situação de retentativa de envio. Podendo usar o campo EventKey ou Id da notificação. Cada evento pode ser enviado, no máximo, 10 vezes. |
Assincronismo | Para evitar situações de timeout e retentativas indesejadas, o ideal é que o endpoint que recebe as notificações opere de maneira assíncrona. Por exemplo: podemos salvar a mensagem recebida para processamento em background e retornar uma resposta imediatamente para o notificador. |
Tipos de eventos e ações
Veja abaixo a lista de eventos publicados pela API de crédito
Tipo de evento | Ação | Payload |
---|---|---|
Proposal | Accepted | Proposta de empréstimo foi aceita pelo cliente e o empréstimo foi criado com sucesso |
Disbursement | Requested | A solicitação de que a instituição financeira faça o depósito do valor contratado na conta do cliente foi feita com sucesso |
Disbursement | Confirmed | Instituição financeira confirmou o depósito do valor contratado na conta do cliente |
Payment | Created | Reembolso registrado (pagamento do saldo devedor do contrato) |
Loan | Settled | Contrato quitado, saldo devedor zerado |
Loan | Cancelled | Emprestimo Cancelado. |
Loan | Inactivated | Empréstimo Inativado |
Loan | CurrentDebtAmountCalculated | Montante da dívida corrente do empréstimo calculado |
CreditLine | Created | Linha de crédito criada. |
CreditLine | Inactivated | Linha de crédito inativada. |
Borrower | WarrantyAccountUpdated | Conta bancária de garantia atualizada |
Firewall e configurações de rede
Para receber as notificações, o assinante precisa estar apto a receber mensagens HTTP das seguintes origens: