Qué se entrega
HG.Cash encola unPOST asíncrono hacia:
- La URL de webhook predeterminada de tu usuario (configurada en Configuración de HG.Cash junto al secreto de firma del webhook), o
- Un
webhookUrlque indiques por operación donde la API o el formulario lo permitan — por ejemplo al crear una transacción de libro vía API REST (POST /api/v1/transactions) o una solicitud de transacción desde transferencias cuando ese campo exista.
Content-Type: application/json y el cuerpo es un único objeto JSON plano (no anidado bajo { "transaction": ... }). Cada payload incluye topic y eventType en el nivel superior para enrutamiento.
Topic y eventType
Las solicitudes de transacción usan siempre
topic TRANSACTION_REQUEST. Cuando un cash-out se vincula al movimiento bancario, busque eventType transaction_associated (no un topic separado).
La forma del payload y ejemplos están en la referencia API (pestaña Referencia API, sección Webhooks):
- Solicitudes de transacción (pipeline cash-out;
typees siempre"request"): Actualización de estado de solicitud de transacción — esquemaTransactionRequestStatusWebhookcon ejemplo completo. - Solicitud vinculada a la transacción de libro (después de asociar el cash-out con el movimiento bancario): Solicitud de transacción asociada — mismo esquema con
transactionIdobligatorio,topicTRANSACTION_REQUESTyeventTypetransaction_associated. - Movimientos de libro / cuenta (dinero entrante o saliente de tus cuentas HG.Cash;
typees el nombre del tipo de movimiento comoinbounduoutbound): Movimiento de cuenta — esquemaAccountMovementWebhookcon ejemplo completo. - Checkouts hospedados (
eventcomocheckout.completed): Eventos de checkout — esquemaWebhookCheckoutPayload. Ver Checkout hospedado.
type: "request")
Los callbacks se envían cuando HG.Cash actualiza el estado de una solicitud o cuando una solicitud se cancela. Cuando una solicitud saliente se vincula a su transacción de libro, HG.Cash puede enviar Solicitud de transacción asociada con topic TRANSACTION_REQUEST, eventType transaction_associated y el transactionId del movimiento bancario. Es posible que no recibas webhook apenas se crea una solicitud si solo está PENDING; integra de forma defensiva ante orden y duplicados.
Transacciones de libro
Cuando una fila de transacción del libro se ingesta desde webhooks/API y aplica tu URL resuelta, HG.Cash puede notificar justo después de persistir; type es el nombre del tipo de negocio, no "request".
Secreto de firma (X-HG-Webhook-Signature)
Si tu perfil HG.Cash tiene un secreto de firma de webhook configurado, HG.Cash firma el cuerpo JSON crudo exacto:
- Algoritmo:
HMAC-SHA256sobre los bytes UTF-8 del string del cuerpo que HG.Cash enviará (equivalente aJSON.stringifydel objeto payload). - Encabezado:
X-HG-Webhook-Signature. - Formato:
sha256=<hex>donde<hex>es hexadecimal en minúsculas (64 caracteres).
- Lee el cuerpo crudo tal como llega — no vuelvas a serializar JSON parseado salvo que repliques exactamente orden/espaciado que usó HG.Cash.
- Calcula
hex = HMAC_SHA256(secret, rawBody_utf8)y compara de forma segura con el valor del encabezado tras quitar el prefijo opcionalsha256=(sin distinguir mayúsculas/minúsculas). - Rechaza discrepancias (
401/403en tu lado está bien).
X-HG-Webhook-Signature se omite por completo.
Reintentos
Las entregas fallidas (HTTP distinto de2xx, errores de red o timeouts) se reintentan automáticamente con esta política:
Cada intento tiene hasta 30 segundos de tiempo total de ejecución antes de que el trabajo de entrega se considere fallido para ese intento.
Expectativas operativas
- Responde con
2xxrápido para que la entrega cuente como exitosa; si no, puedes recibirPOSTrepetidos hasta agotar intentos o hasta que uno tenga éxito. - Prefiere manejadores idempotentes claveados por
idde HG.Cash y transiciones destatusque te importen — pueden existir reenvíos o emisiones duplicadas.

