HTTP Status Codes
400 — Bad Request
The request was malformed or failed validation. Check thedetails field for which fields are invalid.
401 — Unauthorized
The request is missing authentication credentials, or the provided credentials are invalid or expired.- If using a Bearer token, refresh it via
POST /apikey/tokenorGET /authentication/refresh-token - If using API key headers, verify your
X-API-KeyandX-API-Secretare correct
403 — Forbidden
The request is authenticated, but the API key or user does not have permission to perform the requested action.GET /apikey/{id}). If needed, update permissions via PUT /apikey/{id}/permissions (requires 2FA).
404 — Not Found
The requested resource does not exist, or is not accessible from your account.409 — Conflict
A duplicate operation was attempted. Most commonly seen with idempotency key conflicts.details include an existing_transaction_id, that transaction is the canonical result — use it rather than creating a new one. This is the intended idempotency behavior.
422 — Unprocessable Entity
The request is syntactically valid but semantically invalid — for example, trying to send more than your wallet balance.| Error Code | Cause |
|---|---|
insufficient_balance | Wallet balance is too low for the requested transfer |
invalid_address | The to_address is not a valid address for the target chain |
unsupported_token | The chain/ticker combination is not supported |
quote_expired | A swap quote has passed its expires_at timestamp |
gas_station_empty | The gas station for this chain has no native tokens |
card_not_active | The target card is not in an active state |
iban_not_activated | The IBAN account has not completed activation |
error_code and details to determine the specific issue. These errors require business logic changes (top up wallet, get a fresh quote, etc.) — not just a retry.
429 — Too Many Requests
Your request rate has exceeded the limit for your plan.retry_after seconds before retrying. Implement exponential backoff for sustained high-volume use. See Rate Limits for details.
500 — Internal Server Error
An unexpected error occurred on Yativo’s servers.request_id value — it allows the Yativo team to trace the exact request in their logs.
Error Handling Pattern
Idempotency
ThePOST /transactions/send-funds endpoint automatically generates a unique idempotency key for each request. If a network failure causes you to retry a send-funds call, you may receive a 409 Conflict response. This is not an error condition — it means the original transaction was already created. Use the existing_transaction_id from the 409 response body to track that transaction.
To override the auto-generated key with your own, include "idempotency_key": "your-unique-key" in the request body. Keys must be unique per operation type.
