400 | ERRACC_1000 | userId | User id is required | The {userId} path segment is blank or whitespace. | All |
400 | ERRCORE_1001 | currency / accountName / displayName | Validation Failed | A request-body constraint failed. One errors[] entry per failed field. | Open account |
400 | ERRACC_1009 | accountCategory | Unsupported account category. Expected one of: FIAT, CRYPTO, ONRAMP | accountCategory is not FIAT or ONRAMP. | Open account |
400 | ERRACC_1005 | status | Unsupported status ’…’. Expected one of: ACTIVE, PENDING, DEACTIVATED, CLOSED, FROZEN, UNDER_REVIEW, DORMANT | An unknown value was passed in ?status=. | List accounts |
400 | ERRREF_1000 | accountId | ’…’ is not a valid account id | {accountId} is blank, malformed, or not an acct_… reference. | Get, Balance, Activity, Activate, Deactivate |
400 | ERRREF_1000 | walletId | ’…’ is not a valid wallet id | walletId is missing, blank, or not a wlt_… reference. | Open account |
400 | ERRCORE_1001 | Api-Version | The ‘Api-Version’ header is required · Invalid ‘Api-Version’ format · Unsupported ‘Api-Version’: … | The version header is missing, malformed, or names a version the server does not support. | All |
400 | ERRCORE_1001 | null | The request path is not a valid URL | The raw path contains a doubled slash, an encoded slash, a backslash or a control character. | All |
401 | ERRCORE_1004 | null | Partner API key required · Invalid API key · Associated partner is not active or not found | The Api-Key header is missing, does not match an active credential, or its partner is inactive. | All |
403 | ERRCORE_1005 | null | Insufficient permissions | The key is valid but lacks the accounts permission. | All |
403 | ERRCORE_1005 | null | Access denied — User does not belong to this partner | The customer exists but belongs to a different partner. | All |
403 | ERRCORE_1005 | null | Source IP not allowed for this API key (observed: …) | The calling IP is outside the allow-list configured on the key. | All |
404 | ERRREF_1001 | walletId | Wallet ‘wlt_…’ not found | A well-formed wallet reference that resolves to no wallet for this customer. | Open account |
404 | ERRREF_1001 | userId | User with ID ‘cus_…’ not found | {userId} resolves to nothing, or the customer is soft-deleted. | All |
404 | ERRREF_1001 | accountId | Account ‘acct_…’ not found | A well-formed account reference that resolves to no row. | Get, Balance, Activity, Activate, Deactivate |
404 | ERRACC_1001 | accountId | Account not found | The account reference resolved, but no such account belongs to this customer. | Balance, Activate, Deactivate |
404 | ERRCORE_1002 | null | User not found | Relayed from the core service when the resolved user is missing there — a data race, rarely seen. | All |
405 | ERRCORE_1001 | null | HTTP … is not supported for this endpoint | Wrong verb on a real path, e.g. PUT on Get Account. Note the code: a 405 carries the validation code ERRCORE_1001, not a method-specific one. Key off the HTTP status here. | All |
409 | ERRACC_1002 | accountId | Account is deactivated. Reactivate it before using it | Get Account was called on a deactivated account. Use List to see it, or Activate to bring it back. | Get account |
409 | ERRACC_1003 | null | Balance is not available for this account’s provider | The account sits with a provider that has no balance integration. | Get balance |
409 | ERRACC_1003 | null | Activation is not supported for this account’s provider | The account is AED, or sits with a provider that has no lifecycle integration. AED accounts cannot be activated or deactivated. | Activate, Deactivate |
409 | ERRACC_1006 | null | An account already exists for this currency | The customer already has an active or pending account in that currency. | Open account |
409 | ERRACC_1018 | currency | Account limit reached for this currency | The customer already holds 10 accounts in that currency, counting active and pending accounts combined. | Open account |
415 | ERRCORE_1001 | null | Content type … is not supported; use application/json | A non-JSON Content-Type on Open Account. Same quirk as 405 — the code is ERRCORE_1001. | Open account |
429 | ERRCORE_1006 | null | Rate limit exceeded, please retry later | The per-API-key limit was exhausted. Carries X-RateLimit-Limit and X-RateLimit-Remaining. Safe to retry. | All |
500 | ERRCORE_1000 | null | An error occurred while processing your request | An unexpected server error. Quote the X-Request-ID when reporting it. | All |
502 | ERRACC_1011 | null | The balance could not be retrieved. Please try again in a moment | The provider answered but returned no balance. Safe to retry. | Get balance |
502 | ERRACC_1004 | null | The status change could not be accepted. Please try again in a moment | The change could not be queued. Nothing was applied, so it is safe to retry. | Activate, Deactivate |
503 | ERRACC_1012 | null | The account provider is temporarily unavailable. Please try again later | The provider threw or timed out. Safe to retry. | Get balance |