Errors
Every error is a JSON body with a stable error code. Here's what to do with each.
| HTTP | code | what to do |
|---|---|---|
| 400 | bad_request | Missing or malformed parameter (e.g. empty keyword). Fix the request; do not retry. |
| 401 | unauthorized | Missing or invalid API key. |
| 429 | quota_exceeded | Per-minute or monthly quota hit. Back off, or use /v1/scrape/jobs. |
| 503 | server_busy | Our pool is momentarily saturated. Retry with backoff. |
| 503 | upstream_blocked | eBay transiently challenged the request. Retry with backoff; it self-recovers. |
| 503 | research_unavailable | Research aggregation could not complete for this query right now. |
Retry policy
Retry 503 with exponential backoff (start ~1s, cap ~30s, add jitter). Do not tight-loop: for bulk work, enqueue via /v1/scrape/jobs and poll. Never retry 400 or 401 — they won't change on their own.