success boolean. When a request fails, success is false and the error field contains a human-readable message describing what went wrong.
Error response shape
"success": true and include a data field. Error responses never include a data field unless the upstream payment processor returned additional diagnostic detail.
HTTP status codes
400 Bad Request
400 Bad Request
The request body or query parameters are invalid. This is the most common error during integration.Common causes:How to resolve: Check the specific error message. Verify all required fields are present and correctly typed. For bill payments, confirm the
- A required field is missing from the request body
- A field value is in the wrong format (e.g., a non-numeric string where a number is expected)
- An amount does not match the fixed price required by a bill payment service
- A wallet has insufficient balance to cover a transfer or bill payment
amount matches the service’s fixed pricing or omit it to let the API auto-fill it.401 Unauthorized
401 Unauthorized
402 Payment Required
402 Payment Required
Your KYC verification balance is insufficient to complete the request, or your plan’s quota for this API has been reached.Common causes:How to resolve: Top up your KYC verification balance or upgrade your subscription plan. You can check your current balance at
- Your account has no remaining verification credits
- Your active subscription plan’s quota for the requested verification type is exhausted
GET /api/v1/verify/balance.403 Forbidden
403 Forbidden
Your credentials are valid but you do not have permission to access the resource.Common causes:
How to resolve: Verify your account email, check the status of your API key in the dashboard, and confirm your server’s IP is listed in the allowed IPs for the key.
| Error message | Cause |
|---|---|
"Email not verified" | Your account email has not been verified |
"API key is not active" | The API key has been deactivated |
"API key has expired" | The API key has passed its expiry date |
"IP address not allowed" | Your request IP is not in the API key’s allowed IP list |
When your request is blocked due to an IP restriction, the response includes a
yourIP field showing the IP address the server received. Use this to verify your outbound IP and update your API key’s allowed IP list accordingly.404 Not Found
404 Not Found
The requested resource does not exist, or the route path is incorrect.How to resolve: Double-check the endpoint path and any path parameters such as IDs. Confirm the resource (wallet, transaction, etc.) was created before attempting to fetch it.
429 Too Many Requests
429 Too Many Requests
You have exceeded the rate limit for your API key or IP address.How to resolve: Slow your request rate and implement exponential backoff. See the Rate Limits reference for default limits and best practices.
500 Internal Server Error
500 Internal Server Error
An unexpected error occurred on the server.How to resolve: Retry the request after a short delay using exponential backoff. If the error persists, contact support with the request details and timestamp.
Debugging tips
Check success first
Always check
success before reading data. A response can return HTTP 200 with "success": false when the upstream payment processor rejects the transaction.Read the error message
The
error field is always a plain string. Log it alongside the HTTP status code. The combination of both is usually enough to identify the issue without contacting support.Validate before sending
For bill payments, call
GET /api/v1/bills/service-options?serviceId=<id> to retrieve payment codes and fixed amounts before submitting a payment. This prevents 400 errors from amount mismatches.Watch for 402 on KYC
KYC verification endpoints deduct from your balance before calling the upstream provider. A
402 means the deduction was blocked — no charge was made and no verification was attempted.Distinguishing auth errors
The API uses two authentication schemes. The errors they produce differ:401 with "Missing API credentials", you are calling an API-key-authenticated endpoint but sending a Bearer token (or no credentials at all). Switch to the X-API-Key / X-API-Secret headers.
If you receive 401 with "No token provided", you are calling a JWT-authenticated endpoint without a valid Authorization: Bearer header.