Receive real-time notifications when payout events occur.Documentation Index
Fetch the complete documentation index at: https://developer.quickei.io/llms.txt
Use this file to discover all available pages before exploring further.
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):
The event type. Currently always
payout.completed.Your internal reference for this payout.
The amount sent (before fees).
The sender currency code.
Total fee charged.
Total debited from your merchant wallet (
amount + fee).Applied exchange rate.
Amount credited to the recipient.
The recipient’s currency code.
Payout status (e.g.
completed).ISO 8601 timestamp when the payout was processed.
ISO 8601 timestamp when the webhook was sent.
Headers
Each webhook request includes these headers:| Header | Description |
|---|---|
Content-Type | application/json |
X-Quickei-Signature | HMAC-SHA256 signature of the raw request body |
X-Webhook-Event | payout.completed |
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:
| Attempt | Delay |
|---|---|
| 1st retry | 10 seconds |
| 2nd retry | 1 minute |
| 3rd retry | 5 minutes |
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.

