429 rate_limited error with the relevant details.
This page covers the model, which ceiling applies to your key, monthly caps, the headers, the 429 body, and how to back off and retry.
The model
Limits are counted along three dimensions at once:dimension
Your API key. Each key has its own counter.
dimension
The scope the route requires (
data:read, ops:read, or admin). Each scope has its own limit, so heavy product traffic on data:read does not consume your ops:read budget.dimension
A fixed time window. The current window length is 60 seconds. Your counter resets at the start of each window.
Rate limit headers
Every API response (success or error) carries four headers describing your current budget. Read them on every response and let them drive your pacing.string
A description of the policy applied to this request (the limit and window in effect for the matched scope).
integer
The maximum number of requests allowed in the current window for this client and scope.
integer
The number of requests you have left in the current window. When this reaches 0, further requests return
429 until the window resets.string (ISO 8601)
The timestamp when the current window resets and
remaining refills. Use this to schedule retries.Example response headers
The 429 response
When you exceed your limit, the request fails with HTTP429 and the rate_limited code. The details object tells you which scope was limited, the ceiling, and the window length.
429 rate_limited
string
The scope whose limit you exceeded.
integer
The request ceiling for that scope in one window.
integer
The window length in seconds.
Which limit applies to your key
There are two ceilings, and which one governs depends on the kind of key you hold. This is the most common source of confusion, so it is worth being explicit. Self-serve plan keys (Free, Advance, Scale) are limited by plan. This is what applies if you signed up at app.financialdatapi.com:
Enterprise, internal and system keys have no self-serve plan attached, so they fall back to the per-scope baseline instead:
Enterprise keys have no monthly cap.
Both tables are correct; they describe different kinds of key. If you are on a Free, Advance or Scale plan, read the first and ignore the second. Whichever applies, the live
x-ratelimit-* headers and the details block in a 429 are authoritative, so trust those over any number hard-coded in a client.The /v1/ask endpoint has its own budget
/v1/ask runs a language model on every call, which costs far more than a data read, so it is metered separately and does not consume your data-read allowance:
Monthly caps
Monthly caps reset at the start of each calendar month, UTC. Exceeding one also returns429, but with a distinct message, Monthly request cap for your plan has been reached., and a details block carrying your plan and monthly_cap. That lets you tell a monthly exhaustion apart from a per-minute burst without guessing.
Backoff and retry
Retry on429 and on 5xx (internal_error). Do not retry on 4xx other than 429: a bad_request, unauthorized, forbidden, or not_found will fail identically on retry, so fix the request instead.
For a 429, the cleanest strategy is to wait until the window resets:
1
Detect
The response is
429, or x-ratelimit-remaining has hit 0.2
Read the reset time
Take
x-ratelimit-reset from the response headers (or compute from details.window_seconds).3
Wait until reset
Sleep until that timestamp before retrying. This avoids hammering a closed window.
4
Retry, then escalate
For
5xx, use exponential backoff with jitter. Cap the number of attempts so a persistent failure surfaces instead of looping forever.Errors
The full error envelope and code table.
Response envelope
The shared shape of every response.

