Skip to main content

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.
Last modified on May 11, 2026