RateLimit headers to pace yourself, and back off on a 429 instead of hammering.
The limit
Crevio allows 600 requests per 60-second window per credential on the free tier, and 3,000 on a paid plan.
Over the limit you get a
429 with code rate_limit_exceeded, a Retry-After header, and your plan_tier in the error body.
The window is fixed, not rolling: the counter resets to zero at the moment given by X-RateLimit-Reset, not 60 seconds after each individual request.
The limit is uniform across all
https://api.crevio.co/v1 endpoints — reads and writes draw from the same counter. There are no per-endpoint tiers.Reading your quota before you need it
The response headers tell you where you stand after a request. To know your ceiling up front — on startup, or to size a batch — callGET /v1/status:
What counts as a credential
The counter is keyed to whoever is making the call, so one integration can never exhaust another’s budget:- API token — requests authenticated with
Authorization: Bearer YOUR_API_TOKENare counted per token. Issue separate tokens for separate workloads and they get separate budgets. - IP address — OAuth-session and unauthenticated requests fall back to per-IP counting.
Response headers
Every response — success or failure — carries your current standing. Read these instead of guessing. Crevio sends two families of headers. Prefer the standardRateLimit pair; the
X-RateLimit-* triple is kept for existing integrations and will not be removed
without notice under our deprecation policy.
Standard (recommended)
These are the IETF RateLimit header fields, encoded as structured fields.Legacy
The 429 response
Exceed the limit and the request is rejected with HTTP429 and the standard error envelope:
429 carries Retry-After with the number of seconds to wait, alongside the same RateLimit headers.
Handling limits gracefully
1
Retry with exponential backoff and jitter
On a
429, wait, then retry — doubling the delay each attempt and adding a small random jitter so concurrent clients don’t retry in lockstep. Prefer Retry-After when it’s present.2
Use webhooks instead of polling
Don’t poll a task or order for status changes in a tight loop. Subscribe to webhooks and let Crevio push the update to you.
3
Paginate, don't fan out
Walk list endpoints with cursor pagination (
limit + starting_after) rather than firing many parallel requests.4
Cache what rarely changes
Avoid re-fetching values that seldom move (product catalogs, account settings) on every request.
Next steps
Errors
The full error model, including the
429 envelope.Webhooks
Replace polling loops with pushed events.
Conventions
Cursor pagination and the rest of the API’s ground rules.
TypeScript SDK
Automatic retry and backoff out of the box.

