Skip to main content
Every analytics query runs under these limits. Most queries never hit them. When you do, find the error code here to see which limit you hit. For what SQL is allowed, see Analytics query language.

Query shape limits

These are checked before the query runs. Going over one returns HTTP 400, except nesting depth.

Execution limits

These apply while the query runs. Hitting one returns HTTP 422. The 4 MiB response size is the limit people hit first. To stay under it, page with LIMIT and OFFSET, aggregate instead of selecting raw rows, or narrow the time window. NaN and infinity come back as null.

Quota per workspace

By default, each workspace can run 1,000 queries and 1,800 seconds of total query time per rolling hour. Going over either returns HTTP 429 with err:user:too_many_requests:query_quota_exceeded. Wait for the window to roll over, or contact support@unkey.com if you need more.

Retention

Queries only return rows inside your plan’s log retention. If your time filter starts earlier than that, the query fails with HTTP 400 and err:user:bad_request:query_range_exceeds_retention, and the detail names the earliest date you can query. A filter written with toIntervalDay(N) instead of INTERVAL N DAY doesn’t fail. It just leaves the older rows out. See Working with time. Plans agreed with sales have their own retention. Your actual value is the Log retention row on Settings > Limits. See Limits. Each table also has a maximum age, whatever your plan:
  • Verifications: raw, per-minute, and per-hour 90 days; per-day 365 days; per-month 3 years.
  • Rate limits: raw one month; per-minute 7 days; per-hour 30 days; per-day 100 days; per-month 3 years.

Other errors

All errors use the standard API error format, and each error’s type field links to its page.
Last modified on September 29, 2026