Docs · Webhooks
Signed events for status, dispute, and settlement changes.
Every ArosaPay webhook is signed, timestamped, and carries a unique event id — verify the signature, reject stale timestamps, and deduplicate on event id.
Envelope
The event type. Examples: transaction.reserved, transaction.safeguarded, transaction.delivered, transaction.confirmed, transaction.released, transaction.refunded, dispute.opened, dispute.resolved.
The unique event id. Also delivered as X-ArosaPay-Event-Id — use for deduplication.
Event creation time (unix seconds). Also delivered as X-ArosaPay-Timestamp.
Event payload — includes merchant_reference, merchant_order_id, arosapay_transaction_id, and the current settlement_status.
Headers
HMAC-SHA256 of `${timestamp}.${body}` with your webhook secret.
Unix seconds. Reject events older than 300 seconds.
Unique per event. Persist and skip duplicates.
Verification checklist
- 01Parse timestamp
Reject if abs(now − timestamp) > 300 seconds.
- 02Recompute signature
HMAC-SHA256 with your webhook secret, compare in constant time.
- 03Deduplicate
Store event ids you have already processed. Skip repeats.
- 04Respond 2xx
Return within 5 seconds. Non-2xx responses are retried with exponential backoff.
Retries
Delivery is at-least-once.
Non-2xx responses are retried with exponential backoff for up to 24 hours. Deduplicate on event id.
Reconciliation