Errors
Every Soldgraph API error code, what it means, which ones to retry, and how a failed search job differs from an HTTP error.
Every error has the same JSON body:
Error
{ "error": { "code": "invalid_api_key" } }Check error.code. Every response also has an X-Request-Id header. Include it when you contact support. Errors are never charged.
#Error codes
| Status | Code | What it means | Retry-After |
|---|---|---|---|
| 401 | invalid_api_key | The API key is missing, malformed or revoked. | |
| 403 | account_suspended | The account is suspended, so none of its keys work. Email support to restore it. | |
| 403 | origin_not_allowed | A browser sent the request from a site that isn't allowed. Call the API from your server. | |
| 404 | not_found | No such path. | |
| 404 | request_not_found | The job ID is malformed, unknown, or belongs to another account. | |
| 405 | method_not_allowed | Only GET is supported. | |
| 409 | idempotency_conflict | This Idempotency-Key was already used with different search parameters. | |
| 414 | uri_too_long | The query string is longer than 2,048 characters. | |
| 422 | unsupported_or_invalid_query | An unknown parameter, or a value outside the documented range. | |
| 422 | duplicate_parameter | A parameter was sent more than once. | |
| 422 | sort_not_implemented | sort=best_deal is not available. | |
| 422 | invalid_idempotency_key | Idempotency-Key must be 1–128 printable ASCII characters, with no spaces. | |
| 422 | invalid_wait | wait must be a whole number from 0 to 20. | |
| 429 | rate_limited | More than 60 API calls this minute for your account. | 60 |
| 429 | quota_exceeded | Your plan's allowance for the rolling 30 days is used up, and you have no extra requests left. | 3600 |
| 429 | too_many_pending | Your account has too many searches still pending. Wait for results before sending more. | 5 |
| 503 | upstream_daily_limit | The marketplace's daily limit was reached, so new searches are paused. Cached results still work. | 86400 |
| 503 | queue_full | The collection queue is full. | 30 |
| 503 | collection_unavailable | We can't collect from this marketplace right now. | 30 |
| 503 | storage_unavailable | Our database is briefly unavailable. | 5 |
| 503 | origin_unavailable | The edge couldn't reach our API server. | 5 |
| 503 | service_unconfigured | The API is misconfigured on our side. Contact support. |
#What to do
- 429: wait
Retry-Afterseconds. Fortoo_many_pending, poll your pending searches with?wait=20until they finish, then send more. - Other 4xx errors: fix the key or the request. Sending the same call again won't help.
- 503: retry with backoff and the same
Idempotency-Key.upstream_daily_limitcan last a day, so don't keep a request waiting on it. If the 503 body hasstatus: "failed", it's a failed job, not an error. See below.
If you keep getting 503s, check the status page.
#Failed job codes
A job can fail after we accept it. A job poll still returns HTTP 200, with status: "failed" and one of these codes in error.code. Failed jobs cost nothing.
| Code | What it means |
|---|---|
schema | The marketplace page changed shape. We fail the job rather than return data we can't trust. |
network | We couldn't reach the marketplace, or it timed out. |
upstream | The marketplace returned a server error. |
throttled | The marketplace rate-limited us. |
blocked | The marketplace blocked the request. |
rejected | The marketplace rejected the search, for example a source-rejected cursor on Poshmark or Depop. |
auth | The marketplace didn't accept our session. |
daily_limit | The marketplace's daily limit was reached. |
deadline_exceeded | The job didn't finish in time. |
credential_storage | An internal error on our side. |
Retrying a failed search with the same Idempotency-Key returns the failed job again, with HTTP 503. To try again, send it with a new key.