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 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:
See HTTP Response Codes Reference for detailed error handling.
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

