Reference
Rate limits
Limits per plan on the requests of every 15 minutes, budgets that protect your Meta, TikTok and Snapchat accounts from too many calls, and a few daily caps that stop a runaway agent. Scale has twice the limits of Pro.
Per plan
| Per 15 minutes | Pro | Scale |
|---|---|---|
| REST reads (GET, and the reads sent as POST) | 600 | 1,200 |
| REST writes | 120 | 240 |
| REST confirmations (a launch plan, an action, a transfer) | 30 | 60 |
| MCP requests | 600 | 1,200 |
| Per day | Pro | Scale |
| Free reads (then they cost credits) | 5,000 | 10,000 |
| Files uploaded | 2,000 | 4,000 |
| Data uploaded | 100 GB | 200 GB |
How they count
- Per API key, and per account. Each key or assistant connection has its own counters, and every key and connection of the account also share one: more keys never mean more requests.
- Per kind of request. On the REST API, reads, writes and confirmations each have their window; each operation's page says which one it counts toward.
- Per server. The counters live in each server that answers. Under load, the ceiling you meet can be higher than these numbers, never lower: build on these numbers.
- Plans subscribed before the October 2026 pricing keep the Pro numbers, counted per key and per connection.
Headers and 429
Every REST answer carries the rate-limit headers of the IETF draft, one entry per counter: RateLimit-Policy gives its limit (q) and window in seconds (w), RateLimit what is left (r) and the seconds before it resets (t). "read" is this key's counter, "read-account" the account's (write and confirm likewise):
RateLimit-Policy: "read"; q=600; w=900; pk=:YjNmMWE5ZTI3YzQw:
RateLimit-Policy: "read-account"; q=600; w=900; pk=:ZDQ0ODFhYzc3ZjJl:
RateLimit: "read"; r=598; t=812
RateLimit: "read-account"; r=596; t=812 Past a limit, the request answers 429 rate_limited with Retry-After (seconds). Wait that long; retrying sooner only adds to the count. On the MCP server, a 429 answers the HTTP request itself.
Meta, TikTok and Snapchat budgets
On top of the request limits, Apogee spends a budget of platform calls for your Apogee account, so that no automated traffic puts your ad accounts at risk. It is shared by every API key and every AI assistant of the account.
| Per 15 minutes | The account | One ad account | What counts |
|---|---|---|---|
| Meta | 1,800 units | 900 units | A launch interview or a launch plan 15, any other Meta read or change 1, a request that never reaches Meta 0 |
| TikTok, Snapchat (each) | 600 calls | 300 calls | Each call to the platform (a read is a few: the account's currency and time zone, the names, the report) |
Past a budget: 429 rate_limited with Retry-After, and nothing is sent to the platform. When Meta itself throttles an ad account, Apogee answers 429 meta_rate_limited at once and stops calling Meta for that ad account for 2 minutes (for every ad account when Meta throttles the whole Facebook connection). TikTok's and Snapchat's own throttling answers 429 platform_rate_limited.
Daily caps
Rolling 24-hour windows, the same on every plan:
| Cap | Limit | Past it |
|---|---|---|
| One API key or assistant connection | 2,000 units: a read counts 1, a change 2, Apogee's AI 5, a launch or a Bridge transfer prepared or run 10, a status poll 0 | 429 quota_exceeded |
| Launches and Bridge transfers run on one ad account, through the MCP and the API | 25 | 429 quota_exceeded |
| Reads past the free reads | 3 times the daily free reads in all | 429 daily_read_cap until midnight UTC |
The units of the first line only measure a key's activity, to stop an agent that loops: they are not credits and cost nothing.
Uploads
- Up to 50 files per request for signed upload URLs, 500 MB per file. The URLs are valid one hour.
- Per Apogee account and day: 2,000 files and 100 GB on Pro, 4,000 files and 200 GB on Scale; past them,
429 rate_limited.
Safety limits
- Daily budgets: a launch or an action whose daily budget is above 500 in the ad account's currency is refused (
422 budget_above_cap). Set bigger budgets in the app. - Failed sign-ins: 300 requests per 15 minutes per address with a missing or invalid credential, before any credential is checked. A credential that worked in the last few minutes is never held back.
- Maintenance: Apogee can pause the API and the MCP, or only what writes (
503 service_disabled), and its AI features for the API and the MCP (503 ai_paused). The Apogee app keeps working.