Partner webhook delivery
Element Pay POSTs to your configured webhook_url when orders, customers, or accounts change. Treat webhooks as the source of truth for settlement and KYC readiness.
Signature verification
- Parse
X-Webhook-Signature:t=<unix_ts>,v1=<base64_hmac>. - Reject if
tis older than 5 minutes. - Compute HMAC-SHA256 over
{t}.{raw_body}withwebhook_secret; constant-time compare tov1.
Idempotency: dedupe on X-Webhook-Id. Return 2xx quickly.
Guide: webhooks.mdx / hosted /webhooks.
Authorizations
Partner API key. Sandbox keys start with is_test_; production keys start with is_live_. Keys are not interchangeable across environments. Send on every request. Never expose in browser or mobile clients.
Headers
order.processing, order.settled, order.failed, order.refunded, customer.submitted, customer.approved, customer.rejected, customer.revoked, customer.updated, customer.deposit_account.updated, account.opened, account.ready, account.credited, account.send.completed, account.send.failed t=<unix_ts>,v1=<base64_hmac>
Body
- Option 1
- Option 2
Payload shape depends on X-Webhook-Event. Account event bodies: TODO - see docs/KNOWN_GAPS.md.
"YC-580e04c2-a136-5cca-be54-b49fcf80970c"
"settled"
800
"KES"
5.12
156.25
"OnRamp"
"0x4F07419E6bfCCF8D256E8ef803Cc2653dfbB9558"
"2541111111111"
"0xabc..."
Response
Acknowledge receipt. Return any 2xx quickly; process asynchronously if needed.