Errors
Errors are returned as JSON with a stable type code:
{
"error": {
"type": "subscription_required",
"message": "An active subscription is required to use the payment API."
}
}
Error types
| HTTP | Type | Meaning |
|---|---|---|
| 401 | authentication_error | Missing, invalid, or revoked API key. |
| 402 | subscription_required | No active subscription. |
| 402 | transaction_limit_reached | Plan limit for the billing period used up. |
| 403 | merchant_suspended | Account suspended — contact support. |
| 403 | domain_not_allowed | Request came from a browser origin not in your allowed domains. |
| 404 | — | Unknown payment reference (or owned by another merchant). |
| 422 | — | Validation failed; see the errors object. |
| 429 | — | Rate limited (120 requests/minute per key). |
Payment failure reasons
Failed payments carry a failure_reason: duplicate_trx_id (the
TrxID was already used to verify another payment) or rejected_by_admin
(manually rejected after review).