Errors
The Quidax API uses standard HTTP status codes to indicate whether a request succeeded or failed.
| Error Code | Status | Meaning | Common Causes | Fix |
|---|---|---|---|---|
| 400 | Bad request | Your request is missing a required field or contains an invalid value. We couldn't process it as sent. | Missing currency, amount, or fund_uid on a withdrawal Unsupported currency ticker (e.g. usdc misspelled or not in the allowed list) Sending a market order without specifying the market pair Providing amount as a number instead of a string | Check all required body and path params against the endpoint's spec Verify the currency ticker is in the supported currencies list Ensure amount is passed as a string (e.g. "0.0001") |
| 401 | Unauthorized | We could not authenticate the request. Your API key is missing, invalid, or has been revoked. | Authorization header not set or malformed (must be Bearer ) Using a test key against the production base URL or vice versa API key has been regenerated on the dashboard but old key is still in use | Set the header exactly as Authorization: Bearer s3cr3tk3y Regenerate your key from the Quidax developer dashboard if it may have been compromised Never expose your key client-side — always call from your server |
| 403 | Forbidden | Your key is valid, but the authenticated account doesn't have permission to perform this specific action. | Attempting to withdraw from or manage a sub-account that doesn't belong to your master account Trying to cancel an order or withdrawal that belongs to a different user Using a sub-account key to perform master-account-only actions | Use me as user_id for master account actions; use the actual sub-account ID for sub-account actions Confirm the sub-account was created under the authenticated master account |
| 404 | Not Found | The resource you requested doesn't exist — either the ID is wrong or the record was never created. | Fetching a withdrawal, order, or swap using an ID that doesn't exist or belongs to another account Requesting a wallet for a currency that hasn't been initialised yet for that sub-account Looking up a payment address before one has been generated (addresses are created on demand) | For payment addresses, call the Fetch Payment Address endpoint first to trigger address generation Double-check the ID in your path params — use the id field returned in prior API responses Ensure the resource belongs to the authenticated account making the request |
| 429 | Too Many Requests | You've exceeded the rate limit for the endpoint. | Exceeding 300 requests/min across general endpoints Exceeding 20 requests/sec on the wallet address generation endpoint (POST /wallets/{currency}/addresses) Polling deposit or order status in a tight loop instead of using webhooks | Implement exponential backoff with retry on 429 responses Queue and batch requests rather than sending in parallel bursts Use webhooks (e.g. deposit.successful, withdraw.successful) instead of polling |
| 5XX | Server Error | An unexpected error occurred on our side. The request may have been received but the outcome is uncertain. | Temporary infrastructure issues on our end Calling over plain HTTP instead of HTTPS (causes a 301 redirect that can surface as a 5XX) A swap quotation being confirmed after the 15-second validity window has expired | Always use https:// — non-TLS requests return 301 and can leak your API key For swaps: confirm within 15 seconds or call Refresh Instant Swap before confirming Retry with backoff; if it persists, contact Quidax technical support |
Updated about 1 month ago
