Getting started

Rate limits

One sliding-window limiter per key. Friendly headers on every response. Clear 429 when you're over.

Free preview limits

During the public preview every self-serve key is capped at:

  • 60 requests per minute — sliding window, not a hard top of minute reset.
  • 10,000 requests per month — counted over the calendar month in UTC.

Both endpoints under /api/v1/* count toward the same limit.

Response headers

Every /api/v1/* response carries:

Headers
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 47
X-RateLimit-Reset: 1779020201
X-Api-Key-Tier: free

X-RateLimit-Reset is a Unix timestamp in seconds. Subtract Date.now() / 1000 to get seconds until the window resets.

When you're over

We respond with 429 and include a Retry-After header in seconds. The body is JSON:

429 body
{
  "error": "rate_limited",
  "resetAt": 1779020261
}
The limiter uses Upstash Redis in production. In local dev it falls back to an in-memory window, which means limits don't survive process restarts.

Need more?

Higher limits (millions of requests, custom monthly quotas, SLA) are issued out-of-band while paid plans are paused. Email support@oxar.app with what you're building and we'll set you up.