Notificações

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 eventoNome do serviço que originou o evento.
Exemplo: "CreditApi".
Nome do eventoNome do evento assinado, ou wildcard ("*") para todos os eventos.
Exemplo: "Proposal".
Endereço de entregaEndereço do endpoint para qual o POST do payload será feito.
Exemplo: "http://clientapi.com/webhook".
Códigos de resposta HTTP considerados como sucessoEx: 200, 201, 409.

Notificações

As notificações são realizadas utilizando o método POST HTTP e segue o padrão abaixo:

HTTP HeaderDescrição
Credit-Webhook-DeliveryChave de identificação da notificação. A chave não muda caso a mesma notificação seja enviada mais de uma vez.
Credit-Webhook-AuthorizationValor hexadecimal criptografado.
Credit-Webhook-EventNome do evento
{
  "ActionName": "Settled",
  "EventName": "Loan",
  "EventKey": "jrkuiop79879873987423",
  "Id": "01GW11SZD6GYJF817SM6GQDTY2",
  "EventVersion": 1,
  "EventSource": "CreditApi",
  "Timestamp": "2020-02-03T18:59:12.7436071Z",
  "Metadata": { ... }    
}
ActionNameAção responsável por gerar o evento
EventNameTipo do evento
EventKeyIdentificador do evento
EventVersionVersão do schema de metadados do evento
EventSourceOriginador do evento
TimestampTimestamp do evento
MetadataPayload do evento
IdIdentificador 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ênciaOs 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.
AssincronismoPara 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 eventoAçãoPayload
ProposalAcceptedProposta de empréstimo foi aceita pelo cliente e o empréstimo foi criado com sucesso
DisbursementRequestedA solicitação de que a instituição financeira faça o depósito do valor contratado na conta do cliente foi feita com sucesso
DisbursementConfirmedInstituição financeira confirmou o depósito do valor contratado na conta do cliente
PaymentCreatedReembolso registrado (pagamento do saldo devedor do contrato)
LoanSettledContrato quitado, saldo devedor zerado
LoanCancelledEmprestimo Cancelado.
LoanInactivatedEmpréstimo Inativado
LoanCurrentDebtAmountCalculatedMontante da dívida corrente do empréstimo calculado
CreditLineCreatedLinha de crédito criada.
CreditLineInactivatedLinha de crédito inativada.
BorrowerWarrantyAccountUpdatedConta 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: