| 400 | parameter_invalid | One or more request parameters fail validation. The response includes a context.issues array with per-field details. | Inspect context.issues for the offending field; correct the request and retry. |
| 400 | chain_unsupported | The request references a chain Agora does not support. | Use a supported chain. |
| 400 | currency_unsupported | The request references a currency Agora does not support for this operation. | Use a supported currency — see the supported topologies on POST /v0/routes. |
| 400 | direction_unsupported | The from/to pair does not resolve to a supported route direction. | Check the supported topologies on POST /v0/routes and adjust from/to. |
| 400 | entitlement_not_requestable | The requested entitlement can’t be requested for that account or network (unsupported, or already present). The response includes a context.issues array. | Inspect context.issues; request a supported entitlement on a supported network. |
| 401 | unauthorized | Authentication is missing or failed. The specific cause is in context.reason — see Authentication failures. | Resolve per the reason; typically exchange or refresh your session JWT. See the Authentication guide. |
| 403 | forbidden | Authentication succeeded but the credential lacks permission for this resource. | Check the roles on the key in the dashboard; otherwise contact your Agora account manager. |
| 403 | account_not_eligible | Your organization, or the destination account for the requested chain, isn’t eligible for this operation. | Contact your Agora account manager to enable it. |
| 403 | account_not_provisioned | Your organization isn’t provisioned for the product this endpoint belongs to. | Contact your Agora account manager to have the product enabled. |
| 403 | account_verification_pending | Your organization is provisioned for the product, but verification for it hasn’t completed. | Wait for verification to complete, then retry; the check runs per request. Contact your Agora account manager if it stays pending. |
| 404 | not_found | The requested resource does not exist (generic fallback). | Verify the URL and method. The current surface is documented under Endpoints. |
| 404 | account_not_found | The referenced account does not exist for your organization. | Verify the account id against GET /v0/accounts. |
| 404 | route_not_found | The referenced route does not exist for your organization. | Verify the route id against GET /v0/routes. |
| 404 | transaction_not_found | The referenced transaction does not exist for your organization. | Verify the transaction id against GET /v0/transactions. |
| 409 | route_already_exists | A route with these parameters already exists. The response includes context.routeId with the existing route’s id. | Use the existing route — route ids are deterministic; fetch it via GET /v0/routes/{routeId} using context.routeId. |
| 409 | account_already_exists | An account with these details is already registered for your organization (including registering a wallet on a network it already holds). | Fetch it via GET /v0/accounts instead of re-creating it. |
| 429 | rate_limit_exceeded | The per-IP rate limit at the Cloudflare edge was exceeded. The response includes a Retry-After header (seconds). | Wait the Retry-After duration, then retry. Use exponential backoff for repeat triggers. |
| 500 | internal_error | An unexpected server-side failure. The response intentionally omits internal details. | Retry with exponential backoff. If it persists, capture the Request-Id and contact support. |
| 503 | route_creation_unavailable | Route creation is temporarily unavailable. | Retry after a short delay with exponential backoff. If it persists, capture the Request-Id and contact support. |
| 503 | service_unavailable | The service is temporarily unavailable. | Retry after a short delay with exponential backoff. |