Errors

One error format everywhere, with stable codes you can program against.

Errors use RFC 9457 problem details, with Content-Type: application/problem+json:

{
  "type": "urn:typesearch:error:invalid_request",
  "title": "Pedido inválido",
  "status": 400,
  "detail": "query: La consulta necesita dos letras como mínimo.",
  "code": "invalid_request",
  "request_id": "req_8fKq2mZr1xYt",
  "errors": [{ "path": "query", "message": "La consulta necesita dos letras como mínimo." }]
}

Use code in your code — it is stable. title, detail and message are for people, can change, and are currently written in Spanish. Every response, successful or not, carries an X-Request-Id header: include it when you contact support.

Codes

StatuscodeWhat to do
400invalid_json, invalid_requestFix the request. errors lists each invalid field. Unknown fields are rejected too.
400invalid_url, invalid_site, site_not_found, unsupportedFix the URL or site.
401missing_api_key, invalid_api_key, revoked_api_keySee Authentication.
402budget_too_smallRaise max_tokens.
403robots_disallowedThe site’s robots.txt disallows it, or it couldn’t be read (we retry after 10 minutes).
404job_not_foundThe job does not exist for this key, or it expired (jobs last a day).
429rate_limitedRetry after Retry-After seconds.
429quota_exceededDaily token quota used. It resets at 00:00 UTC.
502site_unreachable, invalid_redirect, bot_protectionThe site failed. Try again later or another site.
503upstream_unavailable, browser_unavailableTemporary. Retry with backoff.
504timeout, site_timeoutTemporary. Retry, or use a lighter mode.

Retries

The SDKs retry connection errors, 429 rate_limited and 5xx twice, with exponential backoff and jitter, honouring Retry-After. They never retry quota_exceeded. Calling the API directly, do the same.

Warnings are not errors

Things that don’t stop a request — a domain that is not in the index, a budget reached — come back in the response’s warnings array, each with a code and a message.

On this page