Rate limits
Per-key request limits in three buckets, the headers that report them, and Meta's separate hourly quota.
Request limits
Every endpoint is rate-limited per API key in a rolling 60-second window. There are three buckets, each counted separately:
| Bucket | Applies to | Limit |
|---|---|---|
| Reads | Every GET | 120 / minute |
| Writes | Every other operation | 30 / minute |
| Expensive | POST /api/v1/sync, POST /api/v1/history/pull, POST /api/v1/launch-defaults/pull, POST /api/v1/launches, PATCH /api/v1/launches/{launchId}/copy | 10 / minute |
The expensive bucket is for operations that upload every creative to Meta, rebuild every ad's creative, or spend the account's hourly Meta quota, which launches also need.
Headers
Every response carries:
| Header | Meaning |
|---|---|
RateLimit-Limit | The bucket's limit. |
RateLimit-Remaining | Requests left in the window. |
RateLimit-Reset | Seconds until the window refills. |
RateLimit-Policy | The policy as limit;w=seconds, for example 120;w=60. |
Exceeding a limit returns 429 with code rate_limited, a Retry-After header in
seconds, and a retry_after_ms field in the body:
{
"error": {
"code": "rate_limited",
"message": "Too many writes requests — retry in 12s.",
"retry_after_ms": 11840,
"request_id": "req_8fK2mQ"
}
}The limiter is per running instance, so the effective ceiling across a scaled-out deployment is higher than the advertised number and is not enforced globally. Treat the limits as a backstop against runaway loops, not as a quota to pace against.
Meta's quota is separate
Meta limits the calls Win & Scale may make for an ad account each hour, and syncs,
history pulls, backfills and launches share that allowance.
GET /api/v1/api-usage shows the calls made, the
errors, the throttles, the percentage of each allowance used, and the minutes until
access returns if throttled.
When the quota is used up:
- a history pull is scheduled instead and answers with
status: queuedandretryInMin; - a backfill waits and resumes by itself.
MCP
The MCP endpoint has its own per-user limits: 60 reads and 10 writes per minute, in memory per instance. See Connecting.