O que é entregue
A HG.Cash enfileira umPOST assíncrono para:
- A URL de webhook padrão do usuário (configurada em Configurações da HG.Cash junto com o segredo de assinatura do webhook), ou
- Um
webhookUrlinformado por operação onde a API ou o formulário permitirem — por exemplo ao criar uma transação de ledger pela API REST (POST /api/v1/transactions) ou uma solicitação de transação nos fluxos de transferência quando o campo existir.
Content-Type: application/json e o corpo é um único objeto JSON plano (não aninhado em { "transaction": ... }). Cada payload inclui topic e eventType no nível superior para roteamento.
Topic e eventType
Solicitações de transação usam sempre
topic TRANSACTION_REQUEST. Quando um cash-out é vinculado ao movimento bancário, procure eventType transaction_associated (não um topic separado).
O formato do payload e exemplos estão na referência da API (aba Referência da API, seção Webhooks):
- Solicitações de transação (pipeline cash-out;
typeé sempre"request"): Atualização de status da solicitação de transação — schemaTransactionRequestStatusWebhookcom exemplo completo. - Solicitação vinculada à transação de ledger (após associar o cash-out ao movimento bancário): Solicitação de transação associada — mesmo schema com
transactionIdobrigatório,topicTRANSACTION_REQUESTeeventTypetransaction_associated. - Movimentações de conta / ledger (dinheiro entrando ou saindo das contas HG.Cash;
typeé o nome do tipo de movimento comoinboundououtbound): Movimento de conta — schemaAccountMovementWebhookcom exemplo completo. - Checkouts hospedados (
eventcomocheckout.completed): Eventos de checkout — schemaWebhookCheckoutPayload. Veja Checkout hospedado.
type: "request")
Callbacks são enviados quando a HG.Cash atualiza o status de uma solicitação ou quando uma solicitação é cancelada. Quando uma solicitação de saída é vinculada à transação de ledger, a HG.Cash pode enviar Solicitação de transação associada com topic TRANSACTION_REQUEST, eventType transaction_associated e o transactionId do movimento bancário. Você pode não receber webhook assim que uma solicitação é criada enquanto estiver apenas PENDING; integre de forma defensiva contra ordem e duplicatas.
Transações de ledger
Quando uma linha de transação do ledger é persistida a partir de webhooks/API e sua URL resolvida se aplica, a HG.Cash pode notificar logo após persistir; type é o nome do tipo de negócio, não "request".
Segredo de assinatura (X-HG-Webhook-Signature)
Se o perfil HG.Cash tiver um segredo de assinatura de webhook configurado, a HG.Cash assina o corpo JSON bruto exato:
- Algoritmo:
HMAC-SHA256sobre os bytes UTF-8 da string do corpo que a HG.Cash enviará (equivalente aJSON.stringifydo objeto payload). - Cabeçalho:
X-HG-Webhook-Signature. - Formato:
sha256=<hex>onde<hex>é hexadecimal minúsculo (64 caracteres).
- Leia o corpo bruto como recebido — não re-serialize JSON parseado salvo que replique cada ordem/espaçamento que a HG.Cash usou.
- Calcule
hex = HMAC_SHA256(secret, rawBody_utf8)e compare com segurança ao valor do cabeçalho após remover o prefixo opcionalsha256=(sem diferenciar maiúsculas/minúsculas). - Rejeite divergências (
401/403no seu lado é aceitável).
X-HG-Webhook-Signature é omitido por completo.
Tentativas novamente
Entregas com falha (HTTP diferente de2xx, erros de rede ou timeouts) são repetidas automaticamente com esta política:
Cada tentativa tem até 30 segundos de tempo total de execução antes da entrega ser tratada como falha naquela tentativa.
Expectativas operacionais
- Responda com
2xxrapidamente para que a entrega conte como sucesso; caso contrário você pode receberPOSTrepetidos até esgotar tentativas ou até uma tentativa bem-sucedida. - Prefira handlers idempotentes chaveados pelo
idda HG.Cash e transições destatusrelevantes — reenvios ou emissões duplicadas são possíveis.

