Error Code Reference
This section documents all error codes returned by the PayAlo Merchant Gateway V2 API. Each error response includes a type URL that links to the corresponding error code page.
All V2 errors follow the RFC 7807 Problem Details format with content type application/problem+json:
{
"type": "https://docs.payalo.com/errors/{specific-or-generic-code}",
"title": "Short error category",
"status": 400,
"detail": "Human-readable explanation of this specific occurrence.",
"errorCode": "{generic-code}"
}
How to read these errors
The two code-bearing fields play different roles:
errorCode — the generic category (validation_failed, bad_request, unauthorized, not_found, business_logic_error, internal_server_error). Use this for top-level branching; it never varies within a category.
type — a URL whose final path segment is the specific code that triggered the error (e.g. config_unsupported_currency, merchant_disabled, merchant_transactionid_duplicate). Use this when you need to react to a specific business or configuration rule.
For most validation errors (missing field, bad format, unsupported currency, disabled merchant), errorCode is "validation_failed" and the specific reason lives only in type and detail. For 422 business-logic errors with a dedicated code (e.g. duplicate merchant reference), errorCode and the final segment of type are the same value.
// Example: unsupported currency
{
"type": "https://docs.payalo.com/errors/config_unsupported_currency",
"title": "Validation failed",
"status": 400,
"detail": "Currency is not supported.",
"errorCode": "validation_failed"
}
Synchronous API Error Codes
These error codes appear in HTTP error responses when a request is rejected.
Generic Errors
| Error Code |
HTTP Status |
Title |
Description |
validation_failed |
400 |
Validation failed |
A required field is missing or has an invalid format |
bad_request |
400 |
Bad request |
The request body is malformed or unreadable |
unauthorized |
401 |
Unauthorized |
API key is missing or invalid |
not_found |
404 |
Not found |
The requested resource does not exist |
business_logic_error |
422 |
Business logic error |
A business rule was violated |
internal_server_error |
500 |
Internal server error |
An unexpected server-side error occurred |
Specific Validation Causes (HTTP 400)
These specific codes appear in the type URL while errorCode remains "validation_failed". Branch on type (or detail) when you need to handle them differently:
Specific Business Logic Causes (HTTP 422)
For 422 responses, errorCode carries the specific code directly (no separate type/errorCode split):
Asynchronous Transaction Error Codes
These error codes appear in the errorCode field of transaction objects after asynchronous processing (in callbacks and status check responses). They indicate why a transaction reached the failed status.
User Errors
| Error Code |
Description |
user_limit_exceeded |
End user exceeded daily/weekly/monthly limits |
user_insufficient_funds |
End user has insufficient funds |
user_authorization_failed |
Invalid PIN, OTP, or authorization |
user_account_block |
End user's account is blocked or restricted |
user_too_many_requests |
End user exceeded request rate limits |
user_cancelled |
End user cancelled the transaction |
user_timeout |
Timed out waiting for end user approval |
user_unknown_error |
Unspecified user-side error |
Merchant Errors
| Error Code |
Description |
merchant_limit_exceeded |
Merchant limits exceeded |
merchant_transactionid_duplicate |
Duplicate transaction reference at provider level |
merchant_insufficient_funds |
Merchant wallet has insufficient funds |
merchant_invalid_credentials |
Invalid merchant credentials at provider |
merchant_cancelled_by_risk |
Transaction blocked by risk system |
merchant_unknown_error |
Unspecified merchant-side error |
Provider Errors
| Error Code |
Description |
provider_limit_exceeded |
Provider daily/transaction limit exceeded |
provider_connection_error |
Connection to provider failed |
provider_too_many_requests |
Provider rate limited the request |
provider_cancelled |
Provider cancelled the transaction |
provider_unavailable |
Provider service is unavailable |
provider_transactionid_duplicate |
Duplicate transaction at provider level |
provider_timeout |
Provider did not respond in time |
provider_unknown_error |
Unspecified provider-side error |
provider_noresponse_from_method |
Payment method at provider not responding |
provider_wrong_configuration |
Provider configuration issue |
provider_bad_request |
Provider rejected the request |
Configuration Errors
| Error Code |
Description |
config_unsupported_currency |
Currency not supported for this configuration |
config_unsupported_payment_method |
Payment method not supported for this configuration |
config_method_route_not_found |
No route found for the payment method |
config_method_transaction_min_limit |
Amount is below the minimum allowed |
config_method_transaction_max_limit |
Amount exceeds the maximum allowed |
Security & Risk Errors
| Error Code |
Description |
security_authentication_failed |
Authentication failed at provider |
security_authorization_failed |
Authorization failed at provider |
risk_blocked |
Transaction blocked by risk/fraud rules |
gateway_too_many_requests |
Gateway-level rate limit reached |
System Errors
| Error Code |
Description |
err500001 |
Service temporarily unavailable |
err500002 |
Request timeout |
transaction_expired |
Transaction expired before completion |