Skip to main content
You can make 600 requests per minute per API key. Live and sandbox keys have separate buckets - exhausting one never throttles the other. There are no per-endpoint sub-lanes; the same lane covers reads and writes. When you exceed it you’ll get 429 rate_limited with details.retry_after_seconds. Wait that long, then retry. Live POST /domains/import can also return 429 rate_limited with details.reason: "cloudflare_account_capacity" when all eligible Cloudflare accounts are already handling synchronous imports. Use POST /domains/import/jobs for bulk async imports; that endpoint queues the job under the normal Partner API rate limit instead of rejecting because Cloudflare accounts are busy.

The 429 response

{
	"error": {
		"code": "rate_limited",
		"message": "API rate limit exceeded",
		"details": {
			"retry_after_seconds": 12
		}
	}
}
HTTP status: 429. Always pair it with the Peeker-Request-Id response header in your logs.

Backoff with jitter

Honor retry_after_seconds, then add a small random delay so a fleet of workers doesn’t sync into the next window.
# bash - wait the suggested time + 0–1 second jitter, retry once.
RESPONSE=$(curl -sS -o body.json -w "%{http_code}" \
  -H "Authorization: Bearer $PEEKER_KEY" \
  -H "Content-Type: application/json" \
  -d "$BODY" \
  https://api.peeker.ai/partner/v1/orders)

if [ "$RESPONSE" = "429" ]; then
  WAIT=$(jq -r '.error.details.retry_after_seconds // 5' body.json)
  sleep "$(awk "BEGIN { print $WAIT + (rand() * 1) }")"
  curl -sS \
    -H "Authorization: Bearer $PEEKER_KEY" \
    -H "Content-Type: application/json" \
    -d "$BODY" \
    https://api.peeker.ai/partner/v1/orders
fi

Live and sandbox are separate

pk_live_… and pk_test_… keep independent counters. You can hammer sandbox during integration without affecting live traffic.

Need more than 600/min?

Email support with your typical and peak request rates and we’ll raise the cap. We don’t auto-throttle - production accounts that need more get more.

Webhooks aren’t rate-limited

The webhooks Peeker sends to you aren’t subject to your API rate limit - they’re a separate channel. If your endpoint is slow, Peeker retries with backoff (see webhooks → retries) without consuming your API quota.
Last modified on June 29, 2026