Core Process Flow
The withdrawal process follows these stages:- Request Withdrawal (User/System) - Initial withdrawal request is created
- Perform Validations and gather bank data (Merchant) - Merchant validates the request
- Send Withdrawal Request (Merchant → Tonder) - Request is submitted to Tonder API
- Respond with Pending ID (Tonder → Merchant) - Tonder returns withdrawal ID with
PENDINGstatus - Approve Withdrawal (via API or Platform) - Withdrawal is approved for processing
- Send Withdrawal Request to Acquirer (Tonder → Acquirer) - Request is forwarded to payment provider
- Status Updates - Status updates occur over time via webhooks
Status Codes & Flows
The following table describes each status and the possible transitions:| Status Code | Description | Successful Flow Path | Failure Flow Path |
|---|---|---|---|
PENDING | Initial state after request creation | → PROCESSING | → REJECTED |
PROCESSING | Approved and in progress | → SENT_TO_PROVIDER | → REJECTED |
SENT_TO_PROVIDER | Request sent to the external payment provider | → PAID_FULL | - |
PAID_FULL | Withdrawal fully paid successfully | End State | - |
REJECTED | Withdrawal rejected (by system or action) | - | End State |
Status Flow Diagram
Status Descriptions
PENDING
The withdrawal request has been created and is awaiting approval or initial processing. What happens next:- The withdrawal may be automatically approved if validation passes
- It may require manual approval depending on your configuration
- It will transition to
PROCESSINGwhen approved, orREJECTEDif validation fails
PROCESSING
The withdrawal has been approved and is currently being processed by Tonder’s systems. What happens next:- The withdrawal is being validated and prepared for the payment provider
- It will transition to
SENT_TO_PROVIDERwhen ready, orREJECTEDif processing fails
SENT_TO_PROVIDER
The withdrawal request has been successfully sent to the external payment provider (bank, card network, etc.). What happens next:- The payment provider processes the transfer
- It will transition to
PAID_FULLwhen the transfer completes successfully - This is typically the final processing stage before completion
PAID_FULL
The withdrawal has been fully paid and the funds have been successfully transferred to the beneficiary. What happens next:- This is a terminal success state
- No further status changes will occur
- The withdrawal is complete
REJECTED
The withdrawal has been rejected and will not be processed. Rejection reasons may include:- Invalid beneficiary account information
- Insufficient funds
- Compliance or fraud checks failed
- Manual rejection by merchant or system
- This is a terminal failure state
- No further status changes will occur
- You may need to create a new withdrawal request with corrected information
Monitoring Status Changes
Webhooks (Recommended)
Configure webhooks to receive real-time notifications when withdrawal statuses change. Each webhook includes:- The complete withdrawal object with current status
- A
status_changesarray showing the transition history - Timestamps for each status change
Status Polling
You can also poll the withdrawal status using the withdrawal ID returned in the creation response. However, webhooks are recommended for real-time updates.HTTP Response Codes
The API uses standard HTTP status codes to indicate request outcomes:| Code | Meaning | Description |
|---|---|---|
200 | Success | Request completed successfully |
400 | Bad Request | Invalid request parameters or data |
401 | Unauthorized | Missing or invalid authentication token |
404 | Not Found | Withdrawal ID not found |
500 | Internal Server Error | Server-side error occurred |
Best Practices
- Always handle webhooks: Set up webhook listeners to receive status updates automatically
- Save withdrawal IDs: Store the withdrawal ID from the creation response for tracking
- Handle rejections: Implement logic to handle
REJECTEDstatus and notify users - Monitor timeouts: Some statuses may take time; implement appropriate timeout handling
- Log status changes: Keep an audit trail of all status transitions for debugging
Next Steps
- Learn about system architecture to understand the processing system
- Set up webhook listeners to receive status updates
- Review testing requirements to validate your status handling

