How Webhooks Work
Configure a webhook URL in your Merchant Dashboard under Developer API > Webhooks. Quickei sends an HTTP POST request to your URL whenever a payout is completed.Payload Format
The webhook payload is a flat JSON object (not wrapped in adata envelope):
string
The event type. Currently always
payout.completed.string
Your internal reference for this payout.
number
The amount sent (before fees).
string
The sender currency code.
number
Total fee charged.
number
Total debited from your merchant wallet (
amount + fee).number
Applied exchange rate.
number
Amount credited to the recipient.
string
The recipient’s currency code.
string
Payout status (e.g.
completed).string
ISO 8601 timestamp when the payout was processed.
string
ISO 8601 timestamp when the webhook was sent.
Headers
Each webhook request includes these headers:Signature Verification
TheX-Quickei-Signature header contains an HMAC-SHA256 hex digest of the raw request body, signed with your webhook secret (configured in the Merchant Dashboard).
Verification Examples
PHP
PHP
Node.js
Node.js
Python
Python
Retry Policy
If your endpoint does not return a2xx status code, Quickei retries the webhook delivery:
After 3 failed attempts, the webhook is marked as failed. You can view failed deliveries and trigger manual retries from the Merchant Dashboard under Developer API > Webhooks > Delivery Log.
Return a
200 status code as quickly as possible. Perform heavy processing (database writes, notifications) asynchronously after acknowledging the webhook.Best Practices
- Verify signatures on every webhook before processing
- Respond quickly with a
200and process asynchronously - Handle duplicates — you may receive the same event more than once during retries. Use the
payout_idto deduplicate. - Use the status endpoint as a fallback. If you miss a webhook, poll
GET /payout/{id}to get the current status.

