When the Seismic Cards API rejects a request or encounters a problem, it returns a consistent error envelope with a stable numeric code and a human-readable message:Documentation Index
Fetch the complete documentation index at: https://docs.seismic-cards.systems/llms.txt
Use this file to discover all available pages before exploring further.
4xx for errors you can correct and 5xx for temporary server-side failures. Always pattern-match on code in your code — never on message, because messages may be reworded across versions while codes remain stable.
How to read a code
All codes are 5-digit strings (or 6-digit for field-level errors). The leading digits indicate the class of error:| Range | Class |
|---|---|
00000 – 00099 | Success / informational |
01xxxx – 09xxxx | Field-level validation |
40xxx | Authentication / authorization |
100xxx – 199xxx | Resource lifecycle (cardholder, card, KYC) |
9xxxx | Internal server / dependency errors |
40001 maps to HTTP 400 and 40399 maps to HTTP 403.
Common errors
| Code | HTTP | Meaning | Likely cause |
|---|---|---|---|
000000 | 200 | Success | — |
40001 | 400 | Invalid parameter | A required field is missing or malformed. The message will name the field. |
40002 | 400 | Validation failed | A field passed type checks but failed semantic validation (e.g. invalid country code). |
40003 | 400 | Idempotency key reuse | The same Idempotency-Key was sent with a different request body. Use a fresh UUID. |
40004 | 400 | Reference ID already used | Your referenceId for a cardholder or card already exists. Generate a new one. |
40101 | 401 | Unauthorized | Missing or expired x-access-token. Re-run the OAuth flow to get a new token. |
40399 | 403 | Permission denied | The token is for a different program or environment. |
40404 | 404 | Resource not found | The accountId, cardholderId, budgetId, or cardId doesn’t exist or doesn’t belong to your program. |
40499 | 404 | Endpoint not found | Path typo or wrong API version. |
40901 | 409 | Conflict / duplicate | For example, the email already exists for your parentAccountId. |
40903 | 409 | Cardholder email mismatch | The cardholder belongs to a different sub-account or has a different email. |
42901 | 429 | Rate limit exceeded | Back off and retry with exponential delay. |
50000 | 500 | Internal server error | Retry with the same Idempotency-Key. If the error persists, contact support. |
50301 | 503 | Service temporarily unavailable | Upstream issuer or network outage. Retry after a short delay. |
KYC / cardholder errors
010001 — Email already in use
010001 — Email already in use
The cardholder profile already exists with a different
referenceId. Look it up via GET /v1/cardholders and reuse its id instead of creating a new cardholder.010002 — Email is null
010002 — Email is null
A cardholder
PATCH request must include email for BB / BZ BINs. Add the email field to your request body.010003 — Phone validation failed
010003 — Phone validation failed
The phone number failed
libphonenumber validation. Check that phoneCountryCode contains digits only (no +) and that the phone number itself is valid.010004 — Combined name too long
010004 — Combined name too long
firstName + " " + lastName must be 23 characters or fewer. Abbreviate the name to fit within the limit.010005 — Invalid characters in name
010005 — Invalid characters in name
Names must use A–Z / a–z only. Strip diacritics (e.g.
é → e) and punctuation before submitting.010101 — KYC source not supported
010101 — KYC source not supported
The
sourceType you sent is unknown. Use "sumsub" or contact support to confirm which sources are enabled for your program.010102 — KYC token invalid
010102 — KYC token invalid
The
sumsubShareToken is expired or was issued for a different applicant. Generate a fresh share token from Sumsub and retry.010103 — KYC already approved
010103 — KYC already approved
The user has already passed KYC. No action is needed — you can proceed to initialize the account.
Card lifecycle errors
| Code | Meaning | Action |
|---|---|---|
020001 | BIN not available for account | Pass the correct binId from GET /v1/card/bins. |
020002 | Cardholder not approved | Wait for the CARDHOLDER.UPDATED webhook with status APPROVED before issuing a card. |
020003 | Account not initialized | Call POST /v1/accounts/{accountId}/init after KYC approval, then retry. |
020004 | Budget balance insufficient for issuance | Some BINs require a minimum opening balance. Fund the budget first, then issue the card. |
020005 | Card limit reached | Your program’s per-user maximum has been reached. Contact support to discuss your limits. |
020010 | Card already deleted | The operation was skipped because the card is already closed. |
020011 | Card already frozen / unfrozen | The operation was skipped (idempotent). The card is already in the state you requested. |
Funding errors
| Code | Meaning | Action |
|---|---|---|
030001 | Insufficient balance | The source wallet (USD Wallet or budget) doesn’t have enough funds. Top up before retrying. |
030002 | Currency mismatch | The source and destination must use the same currency. |
030003 | Locked funds | The amount you want to withdraw is locked by pending card authorizations. Wait for them to settle or reduce the withdrawal amount. |
Webhook retry schedule
If your endpoint returns a non-2xx response, Seismic logs the failure and retries automatically on the following schedule:
| Attempt | Delay from previous |
|---|---|
| 1 | Immediate |
| 2 | +30 seconds |
| 3 | +1 minute |
| 4 | +5 minutes |
| 5 | +15 minutes |
| 6 | +1 hour |
| 7 | +4 hours |
| 8 | +24 hours (final) |
Best practices
- Pattern-match on
code, notmessage. Messages may be reworded; codes are stable contracts. - Retry on
5xxand429only. Errors in the4xxrange (except429) won’t succeed on retry without changing the request. - Always send a fresh
Idempotency-Keywhen the request body changes. Reuse the same key only when retrying the exact same request. - Log the full error envelope —
code,message, response headers, and therequest-idheader — before opening a support ticket. - Don’t expose internal codes to end users. Map error codes to human-friendly messages in your UI layer.
Need help?
- Sandbox dashboard: every API call is logged with the request ID, full response, and timing.
- Status page: https://status.seismic.systems
- Support: support@seismic.systems — include the
request-idheader value from any failing response.