Before starting your integration with Xendit, ensure you’ve completed the following steps to avoid issues during testing or deployment.
1. Activate your payment channels
Test Mode
All payment channels are available by default in test mode.
However, some payment flows may be limited due to restrictions from partners (e.g., KYC requirements, regional constraints).
If you encounter issues while testing, please contact our Customer Success team for assistance.
Live Mode
Before going live, check that your desired payment channels are activated in the Dashboard > Payment Channels.
If a payment channel is not activated, related API requests or payment links will fail in production.
2. Create a secret API key
Generate your API key from the Dashboard:
Settings > Developers > API Keys
You can create different API keys for each environment or use case.
Environment | Purpose |
---|---|
Test Mode | Use for development and UAT testing. |
Live Mode | Use for handling real transactions in production. |
Best Practices
Set Write permissions if you’re using money-in features.
Restrict your API key’s permissions to the minimum needed for its purpose.
Store API keys securely using a secrets management tool.
For more details, refer to our API Key Guide.
3. Set up your webhooks
To ensure your system receives real-time updates, webhooks must be configured, even if you use synchronous payment flows.
Why Webhooks Matter:
They notify your system when a payment is completed (e.g., after 3DS or redirection flows).
They help detect and reconcile late or previously unreported payments.
Steps to Register Webhook Endpoints:
Enter your webhook endpoint URLs
Click Test & Save to verify delivery
Confirm that your system receives the exact test notification payload
Available webhook endpoints
Topic | Description |
---|---|
Unified Refunds – Refund Request Succeeded | Triggered when a refund is successfully processed. |
Unified Refunds – Refund Request Failed | Triggered when a refund request fails. |
Payment Requests v3 – Payment Status | Triggered when there is a status update on a Payment object. |
Payment Requests v3 – Payment Request Status | Triggered when there is a status update on a Payment Request object. |
Payment Tokens v3 – Payment Token Status | Triggered when there is a status update on a Payment Token object. |
Payment Session – Completed | Triggered when a payment session is marked as completed, meaning a successful payment attempt was made. |
Payment Session – Expired | Triggered when a payment session reaches expiry without a successful payment. |
Subscriptions | Triggered for subscription plan lifecycle events (e.g., created, renewed, canceled). |
Payment Link | Triggered when a payment link is paid or expired. |