Using the API

Rate limits

Every API key has a fixed request budget per minute. Budgets are generous for well-behaved integrations: with ETags, updated_since, and full pages, a recurring sync rarely spends more than a few requests.

The budgets

BudgetLimitApplies to
Per key120 requests / minuteEach pk_live_ key independently
Per account240 requests / minuteAll of an account's keys combined

Both budgets are enforced in fixed one-minute windows. The values above are defaults; read the response headers for the active per-key budget. Splitting traffic across keys still shares the account budget. Conditional GETs and refused over-budget requests also count toward the window.

Read your remaining budget

Responses that reach the API rate limiter carry its current state (earlier authentication or scope denials may not):

HeaderMeaning
X-RateLimit-LimitThe per-key budget for the current window
X-RateLimit-RemainingPer-key requests left; zero when either the key or account budget refuses the request
X-RateLimit-ResetWhen the window resets (unix seconds)
Retry-AfterOn 429 only: seconds to wait before retrying

When you hit the limit

Over-budget requests fail with 429 and the standard error envelope, code rate_limited:

HTTP/1.1 429 Too Many Requests
Retry-After: 12

{"error": {"code": "rate_limited", "message": "...", "request_id": "req_..."}}

Keep syncs nearly free

A daily catalog sync in three requests.

One GET /api/v1/products?limit=250&updated_since=... per resource you mirror is usually the whole poll — see the sync guide for the full pattern.