All error responses follow a consistent structure:
{ "code": "INVALID_BUSINESS_CUSTOMER_REQUEST", "error": "Bad Request", "details": { "errorMessage": "PHONE_COUNTRY_MISMATCH", "friendlyMessage": "The phone number does not match the customer's country." }}
Field
Description
code
Machine-readable error code for programmatic handling
error
Short human-readable error category
details.errorMessage
Specific reason for the error
details.friendlyMessage
User-friendly message suitable for displaying to end users
Use the details.friendlyMessage field to surface errors directly to your users, and use code for programmatic error handling in your application logic.
In the sandbox/staging environment, transactions reach a final status automatically, usually within 1-2 minutes of creation, so you can build and test your integration end to end. The matching TRANSACTION.UPDATED webhook is sent when the transaction settles.You can choose the outcome through the transaction’s meta.reference:
If meta.reference contains the word fail (case-insensitive), the transaction settles as FAILED. For withdrawals, the amount is returned to your wallet.
Otherwise, the transaction settles as SUCCESS.
Use this to test both your success and failure handling. This applies to the sandbox/staging environment only.