> ## Documentation Index
> Fetch the complete documentation index at: https://waffo.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Error code quick reference

> A complete list of Waffo API error codes and category descriptions.

## Error code format

An error code consists of an alphabetic prefix + digits:

| Prefix | Category | HTTP status code |
| - | - | - |
| **0** | Success | 200 |
| **A**xxxxx | Merchant-related errors | 400-401 |
| **B**xxxxx | User-related errors | 400 |
| **C**xxxxx | System-related errors | 500-503 |
| **D**xxxxx | Risk control rejection | 406 |
| **E**xxxxx | Unknown errors | 500 |

> [!WARNING]
>
> **Category E errors (unknown errors)**: Caused by an unknown state in Waffo’s internal systems or third-party systems. Merchants must continuously query the transaction status until a final success/failure result is returned.

## Full error code list

### Success

| Error code | Description | HTTP |
| - | - | - |
| 0 | Success | 200 |

### A - Merchant-related errors

| Error code | Description | HTTP |
| - | - | - |
| A0001 | Invalid API secret key | 401 |
| A0002 | Invalid signature | 401 |
| A0003 | Parameter validation failed | 400 |
| A0004 | Permission denied | 401 |
| A0005 | Merchant limit exceeded | 400 |
| A0006 | Abnormal merchant status | 400 |
| A0007 | Unsupported transaction currency | 400 |
| A0008 | Transaction limit exceeded / payment amount must be within the allowed range | 400 |
| A0009 | Order does not exist | 400 |
| A0010 | Merchant contract does not allow this operation | 400 |
| A0011 | Idempotency parameter mismatch error | 400 |
| A0012 | Insufficient merchant account balance | 400 |
| A0013 | Payment has succeeded; the order cannot be canceled | 400 |
| A0014 | Refund not allowed due to refund rules | 400 |
| A0015 | Payment channel not supported; the order cannot be canceled | 400 |
| A0016 | Payment channel rejected; the order cannot be canceled | 400 |
| A0017 | Payment channel not supported; the order cannot be refunded | 400 |
| A0018 | The user has no available payment method | 400 |
| A0019 | Refund not allowed due to a chargeback dispute | 400 |
| A0020 | Payment amount exceeds the transaction limit | 400 |
| A0021 | Cumulative payment amount exceeds the daily transaction limit | 400 |
| A0022 | Multiple products detected; the merchant must specify the product name | 400 |
| A0023 | Token has expired; the order cannot be created | 400 |
| A0024 | Exchange rate has expired; the order cannot be processed | 400 |
| A0025 | Period number must be greater than one | 400 |
| A0026 | The checkout page language specified by the merchant is not supported | 400 |
| A0027 | The number of refunds has exceeded the maximum of 50 | 400 |
| A0028 | The subscription is still in progress or has failed, so the management URL is unavailable | 400 |
| A0029 | Invalid card data provided by the merchant | 400 |
| A0030 | Unable to find the card BIN provided by the merchant | 400 |
| A0031 | The card scheme or card type provided by the merchant is not supported | 400 |
| A0032 | Invalid payment token data provided by the merchant | 400 |
| A0033 | Multiple payment methods detected; the merchant must specify the payment method country | 400 |
| A0034 | The order expiry time provided by the merchant has expired | 400 |
| A0035 | The current order does not support capture | 400 |
| A0036 | The current order status does not allow capture | 400 |
| A0037 | The user payment token is invalid or has expired | 400 |
| A0039 | The order has already been refunded by the chargeback alert service | 400 |
| A0040 | The order cannot be created concurrently | 400 |
| A0041 | Chargeback does not exist | 400 |
| A0042 | Chargeback status is already final | 400 |
| A0043 | The current status does not allow evidence submission | 400 |
| A0044 | File does not exist | 400 |
| A0045 | The MIT transaction cannot be processed because the tokenId status is unverified | 400 |
| A0046 | Access denied: the request IP is not in the whitelist | 401 |
| A0047 | The checkout page language format is invalid. It must follow IETF BCP 47: a two-letter ISO 639-1 language code, an optional four-letter ISO 15924 script code, and an optional two-letter ISO 3166-1 alpha-2 region code | 400 |
| A0048 | The previous plan change is still in payment. Wait for the payment process to finish before switching plans | 400 |
| A0049 | The previous plan change is being cancelled. Retry later | 400 |
| A0050 | The previous plan change has been paid successfully. Start a new change from the latest active plan | 400 |
| A0051 | The declared tax amount does not match the tax calculated for this order | 400 |
| A0052 | No available payment method supports the declared tax for this order | 400 |
| A0053 | Missing billing information required to validate the declared tax amount | 400 |
| A0054 | Another plan change request for this subscription is being processed. Retry later | 400 |
| A0055 | The subscription is being modified. Retry later | 400 |
| A0056 | `cancelAt` must be later than now and no later than the subscription end time | 400 |
| A0058 | The subscription has a scheduled cancellation. Resume it before changing the plan or amount | 400 |
| A0059 | The subscription has a scheduled cancellation. Resume it before cancelling immediately | 400 |
| A0060 | The scheduled cancellation has reached its effective time and can no longer be rescheduled | 400 |
| A0061 | Merchant is not allowed to initiate MIT | 400 |
| A0062 | This subscription does not support scheduled cancellation | 400 |

### B - User-related errors

| Error code | Description | HTTP |
| - | - | - |
| B0001 | Abnormal user status | 400 |
| B0002 | User limit exceeded | 400 |
| B0003 | Insufficient user balance | 400 |
| B0004 | The user did not complete the payment within the timeout period | 400 |
| B0005 | User authorization failed | 400 |
| B0006 | Invalid phone number | 400 |
| B0007 | Invalid email format | 400 |
| B0008 | Auth code is invalid | 400 |
| B0009 | Auth code has expired | 400 |
| B0010 | Auth code has been used | 400 |
| B0011 | Access token is invalid | 400 |
| B0012 | Access token has expired | 400 |
| B0013 | Access token does not exist | 400 |
| B0014 | The card is not activated | 400 |
| B0015 | The card has been closed | 400 |
| B0016 | The card number is invalid | 400 |

### C - System-related errors

| Error code | Description | HTTP |
| - | - | - |
| C0001 | System error | 500 |
| C0002 | Invalid merchant contract | 500 |
| C0003 | Invalid order status; unable to proceed to the next step | 500 |
| C0004 | Order information mismatch error | 500 |
| C0005 | Payment channel rejection | 503 |
| C0006 | Payment channel error | 503 |
| C0007 | Payment channel under maintenance | 503 |

### D - Risk control rejection

| Error code | Description | HTTP |
| - | - | - |
| D0001 | Risk control rejection | 406 |
| D0002 | Risk transaction limit | 406 |

### E - Unknown errors

| Error code | Description | HTTP |
| - | - | - |
| E0001 | Unknown status | 500 |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.