The Backstage API limits how often you can call each endpoint. Limits protect the platform from traffic spikes and keep response times predictable for everyone.
Which accounts are limitedRate limits apply only to accounts created after October 4, 2026. Accounts created on or before that date are not limited.
An account that belongs to a network is limited only if the network, and every account in it, was created after that date.
How limits are applied
Every limited request is measured against three windows at once - a one-second window, a one-minute rate, and an hourly volume. A request is allowed only if it fits within all three. Whichever window you exhaust first is the one that stops you.
Limits are applied per account, per endpoint group, with reads and writes counted separately:
GET,HEADandOPTIONSrequests draw from your read budget.- Every other method - including
POST,PUT,PATCHandDELETE- draws from your write budget.
What a limit does not affectExceeding a limit on one endpoint group does not restrict the rest of your integration. Your other endpoint groups keep working, your write budget is untouched when you exhaust a read budget, and the same endpoint continues to work normally for your other accounts.
Windows refill continuously, not on a fixed clock. There is no "top of the minute" reset - your budget replenishes steadily, so a client that paces its requests evenly rarely hits a limit at all.
Rate limit tiers
Each endpoint group is assigned a tier, and the tier determines the three limits.
Lower tier numbers are more permissiveTier 1 allows the most requests, and Tier 6 the fewest. This is the opposite of the convention used by some other APIs - check the number, not just the tier name.
| Tier | Reads (second / minute / hour) | Writes (second / minute / hour) |
|---|---|---|
| Tier 1 | 40 / 420 / 5,000 | 10 / 120 / 1,500 |
| Tier 2 | 20 / 120 / 1,500 | 10 / 60 / 600 |
| Tier 3 | 5 / 60 / 300 | 2 / 12 / 120 |
| Tier 4 | 2 / 15 / 150 | 1 / 8 / 80 |
| Tier 5 | 1 / 5 / 50 | 1 / 2 / 20 |
| Tier 6 | 1 / 1 / 10 | 1 / 1 / 5 |
Second is per second, minute is per 60 seconds, hour is per 3,600 seconds.
Checking your usage
Every response to a rate-limited endpoint - not just a 429 - carries two headers, so you can pace your integration before you hit a limit.
ratelimit-policy: "second";q=5;w=1,"minute";q=60;w=60,"hour";q=300;w=3600
ratelimit: "second";r=0;t=1,"minute";r=12;t=48,"hour";r=180;t=1440ratelimit-policy describes the limits that apply: q is the quota, and w is the window in seconds. ratelimit describes what you have left: r is the number of requests remaining.
UseRetry-After, nottThe
tvalue is the time in seconds for that window to refill to its full quota - it is not the time until your next request will succeed, which is usually much sooner. After a429, always schedule your retry from theRetry-Afterheader.
When you exceed a limit
GET /backstage/api/1.0/{account_id}/campaigns/ HTTP/1.1
Host: backstage.taboola.com
Authorization: Bearer {access_token}HTTP/1.1 429 Too Many Requests
Retry-After: 1
ratelimit-policy: "second";q=5;w=1,"minute";q=60;w=60,"hour";q=300;w=3600
ratelimit: "second";r=0;t=1,"minute";r=0;t=48,"hour";r=180;t=1440
{
"http_status": 429,
"message": "Request cannot be satisfied as assigned quota has been exceeded",
"violated_policies": ["second", "minute"]
}Retry-After is the number of seconds to wait before retrying. Use it to schedule your retry.
violated_policies lists every window you exhausted, and contains any combination of second, minute and hour. A request that exhausts only the second window succeeds again within a second; one that exhausts the hourly window does not.
429 Too Many RequestsA
429means this request was not processed. Nothing was created, updated or deleted, so the request is always safe to retry.
Limits may changeQuotas are reviewed periodically and each tier's limits are subject to change. Read the
ratelimitheaders at runtime rather than hard-coding the values on this page.
For the general shape of API error responses, see Errors.
