astrom8
Get started

Rate limits

Per-tier limits — both requests-per-minute (RPM) and requests-per-day (RPD).

Tier RPM RPD Credits/month
Free 30 1,000 1,000
Starter 120 20,000 10,000
Pro 600 100,000 50,000
Enterprise Custom Custom Custom

Response headers

Every response includes these headers — use them to track remaining quota.

HTTP/2 200
content-type: application/json
x-ratelimit-limit: 120
x-ratelimit-remaining: 117
x-ratelimit-reset: 1746788400
x-request-id: req_a1b2c3d4
  • x-ratelimit-limit — RPM ceiling for the current tier
  • x-ratelimit-remaining — calls left in this minute window
  • x-ratelimit-reset — UNIX timestamp when the window refills
  • x-request-id — opaque ID — pass it to support to debug a specific call

Handling 429 Too Many Requests

Responses include Retry-After in seconds — recommended pattern is exponential backoff (1s, 2s, 4s, 8s) before giving up.

// Exponential backoff on 429
async function callWithRetry(url: string, init: RequestInit, max = 4) {
  let attempt = 0
  while (true) {
    const res = await fetch(url, init)
    if (res.status !== 429) return res
    if (attempt >= max) return res
    const retryAfter = Number(res.headers.get('Retry-After') ?? 1)
    const waitMs = (retryAfter || 2 ** attempt) * 1000
    await new Promise((r) => setTimeout(r, waitMs))
    attempt++
  }
}