- an account-wide limit on the total requests your key makes across all endpoints, and
- per-endpoint limits on a few heavy endpoints, listed below, which are counted separately and on top of the account-wide one.
Limits can change as the API evolves. Read the response headers rather than hardcoding the
numbers on this page.
Response headers
Example response headers
Account-wide limit
Every request your API key makes counts against one budget, whatever the endpoint:
The budget refills continuously (a token bucket), not in fixed minute windows: after a burst you
regain one request every 100 ms. A rejected request does not consume budget, so backing off for
the
Retry-After interval always recovers on schedule.
Logistics endpoints (/v1/logistics/*, /v2/logistics/*) are excluded from the account-wide
limit and governed only by their per-endpoint limits below.
Limited endpoints
Request rate
How many requests you may send per unit of time.Concurrent requests
Bulk endpoints limit how many of your requests may be in flight at the same time, rather than how many you send per second. A bulk call does a lot of work per request, and the cap keeps one client from occupying every worker.Concurrency limits are about parallelism, not pacing. Send bulk calls from a pool of at most 10
workers and you will never see a
429 from them, however long each call takes.
These responses carry Retry-After but no X-RateLimit-* headers — there is no window to
report on.When you hit a limit
The API answers429 Too Many Requests.
/auth/login) throttled the call; it carries Retry-After: 1 and clears within seconds.
On /v2/wastes, /v2/ingest-jobs and /v2/webhook-endpoints the same 429 comes as
problem details, like every other error of those resources:
Retry-After header. Wait that long before retrying — retrying sooner just
earns another 429.
Handling 429 correctly
HonourRetry-After when it is present, and back off exponentially with jitter when it isn’t.
Jitter matters: without it, a fleet of clients that all got throttled retries in lockstep and
throttles itself again.
Staying under the limits
Use the bulk endpoints
Use the bulk endpoints
One bulk call carrying 500 shipments costs a single request against the limit; 500 individual
calls cost 500. See Create Requests Bulk.
Read the headers as you go
Read the headers as you go
X-RateLimit-Remaining tells you how much budget is left before you spend it. Slowing down at
a low remaining count is cheaper than recovering from a 429.Cap your own concurrency
Cap your own concurrency
Size your worker pool to the concurrency limit of the endpoint you are calling — 10 for the
bulk endpoints — instead of firing every request at once and retrying the rejections.
Spread scheduled jobs
Spread scheduled jobs
Nightly syncs that all start exactly at 00:00 pile into the same window. Starting them at a
random offset within a few minutes removes the spike without changing the total work.