Skip to main content

API basics

Rate limits

Each Client Account can make a set number of requests per day. The limit comes from the content-access tier on its API Key.
Standard
250 requests per day
Enterprise
5,000 requests per day
Window
Calendar day, UTC
Resets
00:00 UTC

Daily limits​

Content-access tierLimitArchive depth
Standard250 requests per dayLast 30 days
Enterprise5,000 requests per dayFull archive
  • Counted per Client Account. Every request your account makes counts toward one total, and the total carries over when a key is rotated or reissued. A new key does not reset it.
  • A calendar day in UTC. The count starts again at 00:00 UTC, not 24 hours after your first request.
  • Set by the tier. The same tier decides how far back your key can read. See Authentication.
  • A tier change applies on the next request. It is measured against what you have already used today.

What counts​

The limit covers the three report endpoints: GET /reports, GET /reports/{id} and GET /reports/search.

  • Every authenticated request counts, including one that ends in 404 or 400.
  • A request with an invalid or revoked key does not count. It gets 401.
  • A request answered with 429 does not count. Retrying a spent limit cannot push it further.

Rate-limit headers​

Every response from these endpoints carries three headers, a 429 included.

HeaderMeaning
X-RateLimit-LimitRequests allowed per UTC day on your tier.
X-RateLimit-RemainingRequests left today. 0 on the last permitted request.
X-RateLimit-ResetUnix timestamp, in seconds, of the next 00:00 UTC, when the count restarts.

When you reach the limit​

The next request returns 429 with no report content and the standard error body:

{
"statusCode": 429,
"code": "RATE_LIMIT_EXCEEDED",
"message": "Daily request limit of 250 reached. The limit resets at 00:00 UTC."
}

The Retry-After header holds the seconds until 00:00 UTC. Wait that long, or until X-RateLimit-Reset, before sending another request. Every request in between gets the same 429.

Stay within the limit​

Checking the feed once an hour is 24 requests a day, and fetching ten new reports in full adds ten more: well inside even the Standard limit. These habits keep the count low:

  • Read the feed incrementally. GET /reports returns the newest reports first. Stop paging when you reach a report you already stored, instead of walking the whole feed each time. See Ingest the report feed.
  • Ask for full pages. Send a larger pageSize. The server clamps it to its maximum and returns the size it used, so fewer pages cover the same reports.
  • Fetch each report once. Store the body and images when you retrieve a report, as Retrieve a report does, rather than requesting it again.
  • Filter on the server. Narrow the feed or a search with taxonomy filters instead of downloading everything and filtering on your side.
  • Watch X-RateLimit-Remaining. Slow down or stop as it approaches 0, rather than finding out from a 429.
  • Don't retry what cannot succeed. A 401 or 403 gives the same answer every time. Fix the key, or skip the report. A 429 will not clear until Retry-After has passed.