POST to your registered endpoint with a signed JSON payload.
Registering a webhook endpoint
Register an endpoint from Dashboard → Settings → Webhooks, or via API:Response
Payload format
Every webhook request is aPOST with Content-Type: application/json. The body follows a consistent envelope:
Verifying signatures
Every request includes anAbabilPay-Signature header. Always verify this before processing the payload — it proves the request came from AbabilPay and the body was not tampered with.
The signature is an HMAC-SHA256 of the raw request body, signed with your webhook secret.
Event types
Retry behavior
If your endpoint does not return a2xx response within 10 seconds, AbabilPay retries with exponential backoff:
After 5 failed attempts the event is marked as failed and no further retries occur. You can manually replay failed events from Dashboard → Settings → Webhooks.
Deduplication: Use the
id field to detect retries. Store processed event IDs and skip any event whose ID you have already handled.
Testing webhooks
Use the sandbox environment to send test events without real on-chain transactions:payment.completed payload to your registered endpoint so you can test your handler end-to-end.
For local development, use a tunneling tool such as ngrok to expose your local server: