Unauthenticated surfaces (public tracking, the duty portal, sign-in, OAuth
callbacks, webhook URLs with an unknown token) are limited per visitor IP
instead — 120 requests per 60 seconds for public lookups, 10 per 60 seconds
for the tracking gate, portal unlock (also per link) and sign-in attempts.
Customer-scoped API keys and customer portal logins get their own bucket
under your organization, so a single customer cannot exhaust your limit.
Limits use a sliding window, so short bursts above the sustained rate are
fine as long as the 10-second total stays under the ceiling.
The 429 response
When a limit is exceeded the API answers429 Too Many Requests with a
Retry-After header (seconds):
429
Handling limits well
- Respect
Retry-After. Sleep for the indicated seconds, then retry. Add jitter if you run parallel workers. - Use exponential backoff for repeated 429s rather than tight retry loops.
- Batch instead of flooding. If you need to create thousands of shipments at once, use the shipment-import flow in the dashboard (Shipments → Import) — it accepts a whole file at once and processes it in the background at our pace.
- Spread scheduled jobs. Nightly syncs that fire everything at 00:00 sharp compete with themselves; stagger or stream the work.