To enable webhooks, contact the Palomma team and provide the URL where you
want to receive events.
When we notify
We only send webhooks on final status. Each invoice and settlement triggers a single notification. You will not receive multiple webhooks as a resource moves through intermediate states.Response requirements
Your endpoint must return HTTP 200 within 5 seconds. If we don’t get a response in time, the delivery is considered failed and will be retried. We recommend acknowledging receipt immediately and processing the payload asynchronously.Request structure
Every webhook is aPOST request with a JSON body containing these top-level fields:
Unique identifier for this notification. The same
webhookId is reused across
retries so you can deduplicate.ISO 8601 timestamp of when this delivery attempt was made (updated on each retry).
Event type:
invoice or settlement.Event payload. The shape depends on
type (see below).Event payloads
- Invoice
- Settlement
Sent when an invoice reaches its final status (
type: "invoice").Unique invoice identifier.
Merchant-provided invoice reference.
One of
ready, paid, cancelled, or chargeback.Invoice amount in COP.
Invoice description.
Contract identifier.
Payment link expiration datetime (ISO 8601).
Customer’s document number.
Customer’s display name.
Invoice creation datetime (ISO 8601).
When the invoice was paid. Present on paid and chargeback invoices.
Payment method used. Present on paid and chargeback invoices.
One of
whatsapp, portal, or link. Present on paid and chargeback invoices.Amount actually paid in COP. Present on paid and chargeback invoices.
Expected settlement date. Present on paid and chargeback invoices.
Expected settlement cycle. Present on paid and chargeback invoices.
Payment identifier. Present on paid and chargeback invoices.
Palomma hosted payment page URL for this invoice.
Verifying signatures
Every webhook includes anX-Signature header so you can confirm the request came from Palomma. The signature is an HMAC-SHA256 of the raw request body, using the integrityKey we assigned to your account.
To verify:
- Read the raw request body as a string.
- Compute an HMAC-SHA256 of that string using your
integrityKey. - Compare the result to the
X-Signatureheader. If they match, the request is authentic.
Example (Node.js)
Retries
If a delivery fails, Palomma will retry up to 4 times. The wait between retries increases each time:| Attempt | Approximate wait |
|---|---|
| 1st retry | ~1 minute |
| 2nd retry | ~5 minutes |
| 3rd retry | ~25 minutes |
| 4th retry | ~2 hours |
Handling duplicates
On retries, thewebhookId stays the same but the timestamp is updated. Store the webhookId after you successfully process an event. If you receive the same webhookId again, skip it.
