The v2 API enforces per-IP and per-customer rate limits to keep the platform healthy. When you exceed a limit you’ll get aDocumentation Index
Fetch the complete documentation index at: https://docs.interchange.io/llms.txt
Use this file to discover all available pages before exploring further.
429 Too Many Requests response — back off and respect the Retry-After header.
429 response shape
When rate-limited, the API returns the standard error envelope withcode: "RATE_LIMITED" and includes IETF-standard rate limit headers (draft-7):
| Header | Meaning |
|---|---|
Retry-After | Seconds to wait before retrying. Always honor this value. |
RateLimit-Limit | Max requests allowed in the current window |
RateLimit-Remaining | Requests remaining in the current window |
RateLimit-Reset | Seconds until the window resets |
General limits
| Scope | Window | Limit |
|---|---|---|
| General API endpoints (per IP) | 1 minute | 100 requests |
Auth endpoints (/auth/*) | 15 minutes | 40 requests (production) |
| Signup endpoints | 1 hour | 20 requests (production) |
| Password reset | 1 hour | 12 requests (production) |
These are baseline limits. Per-customer quotas are tier-based and may differ
from the per-IP defaults shown above. If you hit
RATE_LIMITED consistently
during normal operation, contact
support@scope3.com for a higher-tier quota.Recommended polling cadences
Several v2 endpoints expose long-running async work (discovery, ADCP comply checks, media-buy execution). Don’t tight-loop these — pick a cadence that matches the typical latency of the underlying operation.| Endpoint | Recommended cadence | Notes |
|---|---|---|
GET /campaigns/:id/media-buy-status | every 30s (min) | Media-buy state changes are minute-scale; 30s is plenty |
GET /discovery/:id/discover-products | every 5–10s while pending | Slower if the agent set is large; back off to 15s after 1 minute of pending state |
GET /campaigns/:id after POST /execute | every 15–30s | Use webhooks if available — they remove the need to poll |
POST /measurement-data/sync | batch up to API limit, throttle | Group rows up to the documented batch size; don’t fire one request per row |
Polling pattern
Themedia-buy-status endpoint returns one entry per media buy under data.media_buys[] (each with internal_status and adcp_status). Poll until every media buy reaches a terminal state.
Backoff strategy
When you receive a 429 (or a transientINTERNAL_ERROR / SERVICE_UNAVAILABLE):
- Honor
Retry-After. It’s the source of truth for when to retry. - Add jitter. If many clients retry at the same moment you’ll thunder onto a recovering server. Add ±25% random jitter to the wait.
- Cap retries. After 3–5 attempts, surface the error to the user rather than retrying silently.
- Be careful retrying mutations. Retrying
POST /campaignsafter a 5xx may create duplicates — for creates, prefer to surface the error to the user rather than auto-retry.