Skip to content

Errors and Rate Limits

Error envelope

All errors follow a single envelope:

json
{
  "errors": [
    {
      "code": "URLS_LIMIT_EXCEEDED",
      "message": "Maximum 100 URLs per request for priority=high.",
      "field": "urls"
    }
  ]
}

errors is always an array. field is only present on validation errors.

Error codes

CodeHTTPTrigger
UNAUTHENTICATED401Missing, invalid, expired, or wrong-type token.
WEBSITE_NOT_FOUND404Website does not exist.
FORBIDDEN403Token's user has no access to the website, or too low a role for the endpoint.
VALIDATION_FAILED400Invalid request body: an empty URL array, an invalid URL or priority, or a Data Explorer parameter the endpoint cannot honour. field names the offending parameter.
MODULE_REQUIRED403The website has no platform module.
LIMIT_EXCEEDED403A plan limit for this billing cycle is spent.
URLS_LIMIT_EXCEEDED400URL count exceeds the priority's cap.
RATE_LIMITED429Per-website request cap or auth-failure cap hit.
EXPLORER_NOT_FOUND404Unknown or unexposed Data Explorer key.
EXPORT_NOT_FOUND404No such export for this account on this website.
EXPORT_SLOT_BUSY409Another export is already running for this account.
UPSTREAM_REJECTED400The request was rejected downstream for a user-correctable reason; the message says why.
UPSTREAM_UNAVAILABLE502Temporary internal failure. Retry.
INTERNAL_ERROR500Unhandled exception.

Rate limits

  • 60 requests per minute per website. Exceeding this returns 429 RATE_LIMITED with a Retry-After header.
  • 20 authentication failures per minute per source IP also return 429.

Standard headers on rate-limited responses:

  • Retry-After
  • X-RateLimit-Limit
  • X-RateLimit-Remaining
  • X-RateLimit-Reset

Batch URLs into as few requests as possible (up to 1000 URLs per call at priority=normal) rather than sending one request per URL.