Error reference

One envelope for every failure, from every route. The code vocabulary is closed, so a client can switch on it safely.

Codes

Error codes
BAD_REQUEST 400The request could not be understood.
VALIDATION_FAILED 422One or more fields were invalid.
UNSUPPORTED_MEDIA_TYPE 415Send this request as application/json.
NOT_ACCEPTABLE 406No available representation matches the Accept header.
METHOD_NOT_ALLOWED 405That method is not allowed on this route.
NOT_FOUND 404Not found.
URL_SCHEME_NOT_ALLOWED 422That URL cannot be probed.
URL_USERINFO_PRESENT 422That URL carries credentials, so it will not be fetched.
URL_BLOCKED 422That URL cannot be probed.
URL_PRIVATE_ADDRESS 422That URL cannot be probed.
TOO_MANY_REDIRECTS 502The endpoint redirected too many times.
PROBE_TIMEOUT 504 · retryableThe endpoint did not answer in time.
PROBE_FAILED 502 · retryableThe endpoint could not be reached.
RESPONSE_TOO_LARGE 502The endpoint's response exceeded the size limit.
CHALLENGE_MALFORMED 200The challenge could not be parsed.
NOT_X402 200That response did not carry an x402 challenge.
RATE_LIMITED 429 · retryableToo many requests. Try again shortly.
TARGET_RATE_LIMITED 429 · retryableThis endpoint has been probed recently. A cached result may be available.
TURNSTILE_REQUIRED 401This request needs a Turnstile token.
TURNSTILE_FAILED 403The Turnstile token did not verify.
ENDPOINT_OPTED_OUT 403The operator of this endpoint has opted out.
NO_DATA 200No data yet.
UNAUTHENTICATED 401Sign in to continue.
FORBIDDEN 403You do not have access to that.
NOT_IMPLEMENTED 501That is not available yet.
INTERNAL 500 · retryableSomething went wrong on our side.
CHALLENGE_MALFORMED, NOT_X402 and NO_DATA return HTTP 200 on purpose — an endpoint being broken is the answer you came for, not a failure on our side.