Rate limits and quotas

Buckets, weights, headers and the 429 response.

Limits use shared token buckets, so they hold across API instances. The numbers below are proposed defaults until an owner decision publishes advertised limits.

Bucket (per minute, burst)Anonymous (per address)Free keyPro key
read120, 60300, 1003000, 600
writenot limited here30, 10300, 60
expensive10, 520, 10240, 60
Rolling 24 hour requestsnone10 000500 000

Each route has a cost: list and sync pages weigh 2, release package, engine and asset bytes 5, webhook test sends 25 in expensive, and 0 for /v1/developer/key, /v1/developer/limits, /v1/developer/scopes and /v1/openapi.json.

Headers#

Every limited response carries RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset (seconds) for the most constrained bucket.

When you are limited#

A rejection is 429 RATE_LIMIT with Retry-After and details: { bucket, limit, remaining, resetSeconds, retryAfterSeconds, quota }. bucket is daily for the quota. Back off for Retry-After seconds, then retry. The first quota rejection per key per day notifies the app owner.

Tiers and usage#

An app is pro while its owner holds an active Developer API grant, and free otherwise. Usage is recorded per key and hour and readable at GET /v1/developer/apps/{appId}/usage (also as CSV). Usage is informational and kept 90 days.

Edit this page on GitHub · Updated 2026-11-01

esc

↑ ↓ move↩ open⌘↩ new tabesc close