Pular para o conteúdo principal

Webhooks Outbound

Receba notificações em tempo real sobre eventos da sua operação via HTTPS.

Como funciona​

  1. Você cadastra uma URL HTTPS + os eventos que quer receber
  2. A API gera um HMAC secret (exibido apenas uma vez)
  3. Quando o evento ocorre, enviamos um POST assinado com HMAC-SHA256
  4. Se a entrega falhar, retentamos com backoff exponencial (ver Retry policy)

Eventos disponíveis​

Lista canônica (corresponde ao enum webhook_event_type da API). A coluna Emitido indica se o evento é disparado pela API hoje: os eventos Sim são os detalhados em Eventos; os marcados Ainda não são reservados no enum (podem ser selecionados no cadastro do webhook, mas nenhuma entrega ocorre até a emissão ser ativada).

Proposta (proposal.*)​

Uma proposta é uma operação ainda em avaliação, antes de se tornar uma operação efetiva.

EventoQuandoEmitido
proposal.createdProposta criadaAinda não
proposal.simulatedSimulação registrada na propostaAinda não
proposal.approvedProposta aprovadaAinda não
proposal.deniedProposta negadaAinda não
proposal.expiredProposta expiradaAinda não

Operação (operation.*)​

EventoQuandoEmitido
operation.createdOperação criadaSim
operation.pre_approvedOperação pré-aprovadaAinda não
operation.approvedAprovada (Backoffice ou automática)Sim
operation.credit_analyzedAnálise de crédito concluídaAinda não
operation.contract_sentContrato enviado para assinaturaAinda não
operation.contract_signedContrato assinado por todosSim
operation.paidPagamento enviado ao cedenteSim
operation.deniedOperação negadaSim
operation.cancelledOperação canceladaSim
operation.returning_capital_receivedCapital de retorno recebido (parcial)Ainda não
operation.fully_returnedTodo o capital retornadoAinda não
operation.overdueOperação com título(s) vencido(s)Sim

Título (title.*)​

EventoQuandoEmitido
title.paidTítulo individual liquidadoSim
title.partially_paidPagamento parcial recebidoSim
title.overdueTítulo vencido sem pagamentoAinda não

Estoque (stock.*)​

EventoQuandoEmitido
stock.item_registeredRecebível registrado no estoqueSim
stock.item_consumedRecebível consumido por uma operaçãoAinda não

Payload e headers​

Cada entrega é um POST com o corpo JSON do evento e os seguintes headers:

HeaderConteúdo
X-Zemo-SignatureHMAC-SHA256 do body
X-Zemo-Event-TypeTipo do evento (ex.: operation.paid)
X-Zemo-Event-IdUUID único do evento
X-Zemo-TimestampISO 8601 UTC do envio

Exemplo de body:

{
"event_type": "operation.paid",
"event_id": "01970dc6-...",
"occurred_at": "2026-06-01T15:30:00Z",
"data": {
"operation_id": "01970dc5-...",
"display_number": "OP-A1B2C3D4-E5F6G7H8",
"opr_liquid_value": "9183.33",
"payment_sent_at": "2026-06-01T15:30:00Z"
}
}
lifecycle_status nao vem em todo evento

Apenas operation.created e operation.approved trazem lifecycle_status no data. Nos demais eventos operation.* o estado alcancado esta implicito no event_type — se voce precisa do estado explicito, faca GET /v1/operations/{operation_id}. O payload exato de cada evento esta no Catalogo de Eventos.

Retry policy​

  • Aguardamos a resposta do seu endpoint por até 10 segundos (timeout de entrega).
  • Uma resposta não-2xx ou um timeout conta como falha.
  • Em falha, retentamos com backoff exponencial a partir de 1 min, dobrando a cada ciclo, até 7 tentativas no total (ou seja, a entrega inicial + 6 re-tentativas):
TentativaOcorre após a falha anteriorAcumulado desde a 1ª
1— (entrega inicial)0
21 min1 min
32 min3 min
44 min7 min
58 min15 min
616 min31 min
7 (última)32 min63 min

Esgotadas as 7 tentativas a entrega vai para failed. Existe ainda um prazo de desistência (give_up_at) de ~128 min contado da primeira falha: atingido o prazo, nenhuma re-tentativa é feita mesmo que sobrassem ciclos. O prazo não é uma tentativa — dimensione a janela de deduplicação por ele (~128 min), não pelos 63 min.

Esgotadas as tentativas, a entrega fica como failed e pode ser consultada em GET /v1/webhooks/{id}/deliveries.