Docs

Errors & Rate Limits

HTTP status codes

CodeMeaning
200 / 201 / 202Success. 202 means accepted for background processing.
401Missing or invalid API key.
403Browser key used from a domain that isn't on its allow-list.
404The referenced request_id doesn't exist on your account.
422Request is missing a required field or failed validation. Check error / details in the response body.
429Rate limit exceeded. See below.
500Something went wrong on our end. The response still includes request_id — send it to us if you need to investigate.

Error response shape

{
  "error": "Invalid request",
  "details": [
    "Email can't be blank"
  ],
  "request_id": "550e8400-e29b-41d4-a716-446655440000"
}

Rate limits

Your account has one per-minute limit, shared across every server API key on it and across every server you call us from — neither creating more keys nor adding more machines raises it. Each browser key has its own separate limit, counted per visitor. Limits are configured per account — ask your Revylta contact if you need yours raised for a launch or a traffic spike.

429 Too Many RequestsReturned once you exceed your limit.
Retry-After headerSeconds to wait before retrying. Only sent on a 429.

Every /api/v1 response — not just 429s — carries three headers so your integration can pace itself before ever being blocked:

RateLimit-LimitYour per-minute limit for the endpoint you called.
RateLimit-RemainingRequests left in the current one-minute window.
RateLimit-ResetSeconds until the window resets.

Request IDs

Every score response carries a request_id. Generate your own UUID and send it as the X-Request-ID header if you want to control it (useful for idempotency/retries); otherwise one is generated for you. Keep it — it's how you fetch background results, send telemetry, and report outcomes for the same request later.