Errors & Rate Limits
HTTP status codes
| Code | Meaning |
|---|---|
200 / 201 / 202 | Success. 202 means accepted for background processing. |
401 | Missing or invalid API key. |
403 | Browser key used from a domain that isn't on its allow-list. |
404 | The referenced request_id doesn't exist on your account. |
422 | Request is missing a required field or failed validation. Check error / details in the response body. |
429 | Rate limit exceeded. See below. |
500 | Something 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 Requests | Returned once you exceed your limit. |
Retry-After header | Seconds 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-Limit | Your per-minute limit for the endpoint you called. |
RateLimit-Remaining | Requests left in the current one-minute window. |
RateLimit-Reset | Seconds 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.