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. Cada payload inclui topic e eventType no nível superior para roteamento. A maioria dos corpos é um objeto JSON plano; checkout.completed pode incluir também um objeto transaction aninhado com os dados da movimentação no ledger (mesmos campos de Movimentação de conta, sem topic nem eventType).
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 exemplos. Quando um detalhamento de taxa foi salvo, o corpo incluifeeBreakdownopcional. Veja Detalhamento da taxa. Quando uma movimentação PIX do Brasil armazena um identificador end-to-end, o corpo incluiendToEndIdopcional. Veja Identificador end-to-end PIX. - Checkouts hospedados (
eventcomocheckout.completed): Eventos de checkout — schemaWebhookCheckoutPayload. Emcheckout.completed, quando há uma transação de ledger vinculada, o payload inclui um objetotransactionaninhado (mesmos campos de Movimentação de conta, semtopicnemeventType). Veja Checkout hospedado. - Mudanças de status de reclamação (
topicCLAIM,eventTypestatus_change): Status da reclamação atualizado — schemaClaimStatusWebhook. Enviado para a sua URL de webhook padrão quando um administrador atualiza uma reclamação ou a COELSA a autoconcilia. O corpo corresponde à resposta de Obter reclamação (GET /claims/{id}, semfileUrl) mais os metadados de roteamento, com um campocommentopcional. Webhooks não são enviados na criação da reclamação nem em atualizações que apenas adicionam um comentário. Veja Reclamações.
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".
Detalhamento da taxa
Webhooks de movimentação de conta (topic TRANSACTION, eventType created ou status_change) incluem feeBreakdown opcional quando a HG.Cash salvou um detalhamento de taxa na movimentação. O campo é omitido quando não há detalhamento. Linhas internas de taxa não enviam webhook.
O objeto do webhook tem dois campos. flatFee.amount é a taxa fixa. collectedAmount é o percentual cobrado mais essa taxa fixa. Webhooks não incluem platformFee, transactionFee nem flatFee.source.
Em checkout.completed, o objeto transaction aninhado usa os mesmos campos, inclusive feeBreakdown quando a movimentação vinculada tem um detalhamento.
120) mais uma taxa fixa de 15, então collectedAmount é 135. Esses valores percentuais ficam na resposta de status. Eles não vão no webhook.
GET /api/v1/{br,cl,co,bo}/transactions/{id}/status devolve platformFee, transactionFee, flatFee (incluindo source: account ou platform) e collectedAmount quando existe um detalhamento. O status da Venezuela devolve os mesmos valores e omite flatFee.source. GET /transaction/{id}/status é o status de uma solicitação de transação e não inclui feeBreakdown.
Identificador end-to-end PIX
Webhooks de movimentação de conta (topic TRANSACTION, eventType created ou status_change) incluem endToEndId opcional quando a movimentação armazena um identificador end-to-end de um PIX do Brasil. O valor é essa string armazenada, sem espaços no início ou no fim. A HG.Cash omite o campo quando o identificador está ausente ou vazio. O campo fica no nível superior do JSON, junto de campos como id e status. Vale para PIX de entrada e de saída.
Você recebe o campo nestes casos:
- Uma atualização de status PIX envia
eventTypestatus_changee o identificador já está armazenado. - Uma atualização posterior do provedor grava o identificador pela primeira vez e essa atualização ainda não notificou você. A HG.Cash envia então um
TRANSACTION/status_changecom o corpo atualizado. - Um reenvio pelo painel envia
eventTypecreateda partir da movimentação armazenada, e o identificador já está salvo.
endToEndId uma única vez. Um identificador que já estava armazenado não gera outra entrega por si só.
Em checkout.completed, o objeto transaction aninhado usa os mesmos campos de movimentação, inclusive endToEndId quando a movimentação vinculada tem um.
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.

