Rate limits

Two limits apply to every account. The monthly quota caps the number of API calls in a calendar month. The burst limit caps the number of requests in one minute. This page explains both, and the headers that report them.

What counts as an API call

One request to POST /v1/detect costs one API call, whatever the number of checks it runs. A request that fails before the media is loaded does not count. That covers authentication errors, invalid request bodies, and burst limit responses. A request that reaches the download step counts, even if the download then fails.

Requests to POST /v1/uploads and GET /v1/detectors are free.

Monthly quota

The quota counts API calls from the first day of the month to the last, in UTC. It resets at midnight UTC on the first day of the next month. The quota is shared by every key on the account.

PlanAPI calls per month
Free500
API starter10,000
API growth100,000
CustomAgreed with you

When you reach the quota, the API returns HTTP 429 with the error type quota_exceeded. Nothing is billed for the extra requests. Read the pricing page to move to a larger plan.

Burst limit

The burst limit protects the service from a single caller that sends every request at once. It counts requests per key in the last 60 seconds.

PlanRequests per minute
Free10
API starter60
API growth120
Custom300

When you pass the burst limit, the API returns HTTP 429 with the error type rate_limited and a Retry-After header. Wait that many seconds before you send the next request. Burst limit responses do not count toward the monthly quota.

Headers

Every response from POST /v1/detect carries these headers.

HeaderMeaning
X-Quota-LimitAPI calls allowed this month.
X-Quota-UsedAPI calls used this month, including this one.
X-Quota-RemainingAPI calls left this month.
X-Quota-ResetWhen the quota resets, as an ISO 8601 time in UTC.
RateLimit-LimitRequests allowed per minute for this key.
RateLimit-RemainingRequests left in the current minute.
RateLimit-ResetSeconds until the burst window resets.
Retry-AfterOnly on HTTP 429. Seconds to wait before the next request.

File size limits

Media sourceLimit
media (base64)4 MB
Multipart file4 MB
url25 MB, 15 second download
upload25 MB

Read the detect endpoint reference for the direct upload flow.

Handle limits in code

  • Read X-Quota-Remaining and warn your team before the quota runs out.
  • On HTTP 429, read Retry-After and wait that many seconds. Do not retry in a tight loop.
  • Cache results by the media.sha256 value. The same file gives the same result, so there is no need to check it twice.

Was this page helpful?