🔍

Request rate limits

Requests are rate-limited per plan. The window is 15 seconds. If you exceed the limit, the API returns HTTP 429 and you must wait for the window to reset before retrying.

PlanRequests per 15 s
Free1
Basic5
Pro30
Expert75
TODO(human): Verify that these rate limits are current and complete. The spec marks them as "example limits."

Credits

A credit is a unit that counts against your plan's monthly allowance. Each API call consumes a certain number of credits depending on the endpoint and what it returns.

TODO(human): Credit costs per endpoint and per-plan monthly totals are not in the spec. Add them here.

Bulk requests and construct limits

A single POST /bulk request can contain up to 20 constructs, each with up to 20 indicators. How many constructs your plan allows per request may differ from the hard cap — see your subscription for plan-specific limits.

TODO(human): Confirm per-plan construct limits for POST /bulk.

Handling 429 responses

When rate-limited, the API returns:

429 Too Many Requests
{ "error": "Rate limit exceeded. Your plan allows 30 requests per 15 seconds." }

Wait until the 15-second window expires, then retry. Do not retry immediately in a tight loop — that will keep triggering 429s.

For long-running applications, consider using WebSocket streaming, which maintains one persistent connection and pushes updates without counting per-poll requests.