Documentation Index
Fetch the complete documentation index at: https://docs.peeker.ai/llms.txt
Use this file to discover all available pages before exploring further.
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.
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/api/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/api/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.