Limits
Page sizes, export caps, payload sizes, time-outs, retry schedules, rate limits and retention — the fixed mechanics of the platform, in one place.
After this page you can size a job against the platform before you write it: how many rows a request answers with, how big a body may be, how long you have to post a conversion, and what happens when you go over. Two kinds of limit apply to a workspace, and only one of them is here.
| Plan limits | Platform limits | |
|---|---|---|
| What they cap | How many campaigns, tracking numbers, buyers, targets, publishers, API keys and webhooks you may hold. | Page sizes, payload sizes, time-outs, retries, rate limits and retention. |
| Who they differ for | Every plan. Your own are on the console's overview, counted against what you hold. | Nobody. They are the same for every workspace. |
| Where to read them | The pricing page, and GET /api/tracking/workspace. | This page. |
| What happens at the ceiling | A create answers 402 plan_upgrade_required, naming the noun. | Documented per limit below. |
Lists and pagination
| Limit | Value |
|---|---|
| Default page size | 25 on most lists. 50 on the ping ledger and on an API key's request log. |
| Largest page size | 200. A larger pageSize is clamped down rather than refused, so a request never fails over it. |
| First page | page=1. There is no page zero. |
| Answer shape | { data, page, pageSize, total, totalPages } on every paged list. |
| Call log sort | startedAt (the default), talkSeconds or billedCents, each with dir=asc or desc. An unknown sort falls back to startedAt instead of failing. |
Reports
| Limit | Value |
|---|---|
| Widest window | 366 days for a report, a time series by day or week, and the call log. |
| Widest hourly time series | 31 days. A wider range answers 400. |
| Dimensions per report | 2. Naming a third, or the same one twice, answers 400. |
| Rows per summary report | limit is 1–5,000 and defaults to 500. truncated: true says more groups matched than were returned. |
| Tag keys offered by the builder | The 100 most common keys among the newest 5,000 tagged calls of the last 30 days. It is a menu, not a promise: a tag that is not offered can still be typed. |
| Caller search | At least 4 digits, at most 32 characters. Fewer than four answers 400. |
| Talk-time filters | minTalk and maxTalk take 0–86,400 seconds, and minTalk may not exceed maxTalk. |
totals always covers the whole filtered window, not the rows returned — so the footer of a truncated report is still true.Exports
| Export | Row cap | Notes |
|---|---|---|
| Call log | 100,000 | Streamed in batches of 2,000. Over the cap, the newest rows are written and the rest are not; the activity entry records that it was capped. |
| Report | 5,000 | Fixed. The limit you send to the JSON report is ignored here — group more coarsely or narrow the window. |
| Ping ledger | 50,000 | Streamed in batches of 2,000. One file per direction: inbound and outbound have different columns. |
| Activity log | 50,000 | limit defaults to 10,000 and may be raised to the cap. |
- Every export is written to the activity log before its first byte, with the filter that produced it and the row count.
- An export that fails halfway has its connection destroyed rather than being ended tidily. A download that visibly broke is recoverable; a CSV that silently stops at row 38,000 is a report somebody will trust.
- The format — encoding, quoting, the leading apostrophe — is the same for all four. See Exports.
Tags
| Limit | Value |
|---|---|
| Tag key | 1–64 characters: letters, digits, ., - and _. Anything else answers 400. |
| Tag value | 512 characters. A longer value is truncated, not refused. |
| Tags on one ping | 40. Extra fields past that are dropped rather than failing the ping. |
| Tags in one tagging request | 40 keys. |
| Tags on one call | 80 in total. A request that would take a call past it answers 400. |
| Value types | Strings, numbers and booleans. Everything is stored as a string, so a filter comparing "35" with 35 is a bug that cannot happen. |
null value removes that tag. See Filters and tags.Calls and their books
| Limit | Value |
|---|---|
| Conversion postback window | 72 hours after the call ends. Later answers 410 window_closed. |
| Conversions per call | One, through the buyer's postback. A second answers 409 already_converted — a correction goes through the console or the API instead of silently overwriting the first. |
| Adjustments per call | 50. The fifty-first answers 409. |
| Largest figure on one call | $1,000,000. More than that on a single call is a typo, not a correction. |
| Live board | Calls started in the last 6 hours that have not ended, at most 200, never cached. |
| Recording playback cache | One hour, private to the browser that asked for it. |
Real-time bidding
| Limit | Value |
|---|---|
| Request body on the RTB endpoints | 32 KB. Bodies are read raw and are not decompressed before the limit applies. |
| Request body everywhere else | 2 MB. |
| Default rate limits per publisher key | 120 a minute, 5,000 an hour, 50,000 a day. Each key can be given its own. |
| Signed-request clock tolerance | 5 minutes either way. Outside it the signature is stale, whatever else is correct. |
| Previous signing secret after a rotation | None. Rotating a signing secret replaces it immediately, and requests signed with the old one are refused from that moment. Rotating the *key* is the one with a window — see the row below. |
| Previous routing key after a rotation | The grace window you choose: 60 minutes by default, 0 to kill it at once, up to 7 days. A publisher rotating their own key from the portal gets a fixed 24 hours. |
| DNI endpoints | 300 requests a minute per address. |
Webhooks and pixels
| Limit | Value |
|---|---|
| Time-out for one delivery | 10 seconds, measured to the response headers. |
| Attempts per event | 4: the first, then retries after 1 s, 5 s and 25 s. The fourth failure schedules nothing. |
| Degraded | An endpoint is flagged after 2 consecutive failed deliveries and cleared by the next success. |
| Queue | The dispatcher runs every 15 seconds and sends at most 25 deliveries per pass, one at a time. |
| Response kept | The first 2 KB of your response body — enough to read your error page's first paragraph, not enough to be a copy of your site. |
| Request body kept | 8 KB, for a pixel only. A webhook's body is the envelope, which is already stored as the payload. |
| Events per endpoint | 20 named events, or *. |
| URL | 2,000 characters, http(s) only, no spaces. |
| Headers | 20 entries, each value a single line of at most 1,000 characters. |
| Body template | 10,000 characters. |
| Replay failures | 1–500 events per click, default 200 — one replay per event, never one per attempt. |
| Test deliveries waiting | 5 per endpoint. A sixth answers 409 until the queued ones have been sent. |
| Endpoint health window | The last 24 hours of stamped deliveries. |
4xx, a 5xx, a redirect, a time-out and a refused connection are all failures and all retried. See Webhooks.API keys and the REST API
| Limit | Value |
|---|---|
| Default rate limit | 120 requests a minute per key. |
| Configurable rate limit | 1–1,200 a minute. You may slow a key down; you may not set it free. |
| Window | A sliding 60 seconds, so there is no burst of double the limit across a minute boundary. |
| Over the limit | 429 rate_limited with a Retry-After in seconds. Refused requests are not counted against the window. |
| Headers on every answer | RateLimit-Policy and RateLimit, when the key has a limit at all. |
| Scopes per key | 20, each at most 40 characters. |
| IP allowlist | 50 entries. An IPv4 address or range such as 203.0.113.0/24, or a single IPv6 address. |
| Rotation grace window | 0 minutes to 7 days, default 24 hours. The old key answers 401 once it closes. |
| Request log query | The parsed query string is stored up to 4 KB; past that only its keys are kept. Bodies are never stored. |
Retention
| Record | Kept for |
|---|---|
| Calls, their waterfalls and their books | Not pruned. A call keeps its decision trail and its figures. |
| Ping ledger — auctions and bids | 30 days, then pruned. The ledger can be queried over a window of up to 92 days, so an older window simply comes back empty. |
| Webhook and pixel deliveries | Kept with their endpoint. Deleting an endpoint deletes its deliveries with it. |
| Activity log | Kept, and unchangeable: the table refuses an update outright and a delete outside the platform's retention job. No API removes a row. |
| Recordings | Held by the carrier under its own retention window. Past it, playback answers 410 and says so rather than showing an empty player. |
Staying inside them
- Page with a purpose. If you are about to walk 400 pages of the call log, you want the CSV export instead: it streams, it is consistent, and it costs one request.
- Respect
Retry-After. It is computed to be the first second at which the request will succeed, so retrying earlier is guaranteed to fail and counts as a request you did not have to make. - Back off on
5xx, not on4xx. A400will be a400however many times you send it. Fix the request. The one4xxworth retrying is429, at the momentRetry-Afternames. - Answer webhooks in milliseconds. Ten seconds is the ceiling, not the budget. Acknowledge, then do the work.
- Post conversions promptly. Seventy-two hours is generous for a same-day sale and short for a weekly batch. A nightly job is safely inside it; a Monday-morning one is not.
