The Admaxxer Pixel API enforces a token-bucket-equivalent fixed window to protect every workspace from noisy neighbors and accidental runaway loops.
/api/v1/* endpoints, including /me.If you need a higher ceiling for a large warehouse backfill, email support@admaxxer.com with the workspace ID and target QPS — we can raise the limit per workspace.
Every successful response includes:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 57
X-RateLimit-Reset: 1713360000
X-RateLimit-Reset is a Unix timestamp (seconds) at which the window resets.
HTTP/1.1 429 Too Many Requests
Retry-After: 42
{
"error": {
"code": "rate_limit_exceeded",
"message": "Rate limit exceeded. Try again in 42 seconds.",
"details": { "limit": 60, "window": "1 minute" }
},
"meta": { "request_id": "req_…" }
}
X-RateLimit-Remaining as a steady signal. If it drops to 0, wait until X-RateLimit-Reset.Retry-After. Add up to 10% jitter to avoid thundering-herd re-sync when many workers share a workspace.The v1 POST /pixel/events endpoint accepts one event per call. For bulk historical backfills:
The GET /pixel/metrics/{pipe} endpoint mints a JWT and returns it. The JWT has its own downstream rate limit enforced by our analytics warehouse (typically generous). Our API call to mint counts as one request against the 60/min budget; your subsequent direct calls to our analytics warehouse do not.
We emit structured log lines per rate-limit rejection. If you see unexpected 429s, check Settings › API Keys — the usage meter shows requests in the last hour per key.
60 requests per minute per workspace across all /api/v1/* endpoints (including /me). That sustains ~3,600 requests/hour or ~86,400 requests/day. The browser pixel has separate limits — this cap only applies to the public API.
Every successful response carries X-RateLimit-Limit (60), X-RateLimit-Remaining (count left in the window), and X-RateLimit-Reset (Unix timestamp in seconds at which the window resets). Use Remaining as your steady-state signal; throttle before it hits zero.
Read the Retry-After header (in seconds) and wait at least that long. Add up to 10% jitter to avoid thundering-herd re-sync when many workers share a workspace. The response body uses the standard error envelope with error.code = "rate_limit_exceeded".
Yes — email support@admaxxer.com with the workspace ID and your target QPS. Per-workspace ceilings can be raised. For one-time historical loads we typically issue our analytics warehouse direct-append token that bypasses the public API entirely and lets you ship millions of rows in minutes.
The budget is per-workspace, not per-key. Read and write keys for the same workspace share the same 60/minute pool. Use separate keys for separate integrations so revocation is granular, and avoid letting a spiky write workload starve a steady read dashboard.
Yes — each call to GET /pixel/metrics/{pipe} counts as one request against the workspace budget. The endpoint server-side-proxies our analytics warehouse and returns the pipe payload directly, so there is no separate our analytics warehouse call you need to budget for.