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 limitsPlatform limits
What they capHow 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 forEvery 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 themThe pricing page, and GET /api/tracking/workspace.This page.
What happens at the ceilingA create answers 402 plan_upgrade_required, naming the noun.Documented per limit below.

Lists and pagination

LimitValue
Default page size25 on most lists. 50 on the ping ledger and on an API key's request log.
Largest page size200. A larger pageSize is clamped down rather than refused, so a request never fails over it.
First pagepage=1. There is no page zero.
Answer shape{ data, page, pageSize, total, totalPages } on every paged list.
Call log sortstartedAt (the default), talkSeconds or billedCents, each with dir=asc or desc. An unknown sort falls back to startedAt instead of failing.
To pull a whole window, use a CSV export rather than paging: it streams far more rows and does not shift under you as new calls arrive.

Reports

LimitValue
Widest window366 days for a report, a time series by day or week, and the call log.
Widest hourly time series31 days. A wider range answers 400.
Dimensions per report2. Naming a third, or the same one twice, answers 400.
Rows per summary reportlimit is 1–5,000 and defaults to 500. truncated: true says more groups matched than were returned.
Tag keys offered by the builderThe 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 searchAt least 4 digits, at most 32 characters. Fewer than four answers 400.
Talk-time filtersminTalk 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

ExportRow capNotes
Call log100,000Streamed 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.
Report5,000Fixed. The limit you send to the JSON report is ignored here — group more coarsely or narrow the window.
Ping ledger50,000Streamed in batches of 2,000. One file per direction: inbound and outbound have different columns.
Activity log50,000limit 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

LimitValue
Tag key1–64 characters: letters, digits, ., - and _. Anything else answers 400.
Tag value512 characters. A longer value is truncated, not refused.
Tags on one ping40. Extra fields past that are dropped rather than failing the ping.
Tags in one tagging request40 keys.
Tags on one call80 in total. A request that would take a call past it answers 400.
Value typesStrings, numbers and booleans. Everything is stored as a string, so a filter comparing "35" with 35 is a bug that cannot happen.
Sending a key with a null value removes that tag. See Filters and tags.

Calls and their books

LimitValue
Conversion postback window72 hours after the call ends. Later answers 410 window_closed.
Conversions per callOne, 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 call50. 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 boardCalls started in the last 6 hours that have not ended, at most 200, never cached.
Recording playback cacheOne hour, private to the browser that asked for it.

Real-time bidding

LimitValue
Request body on the RTB endpoints32 KB. Bodies are read raw and are not decompressed before the limit applies.
Request body everywhere else2 MB.
Default rate limits per publisher key120 a minute, 5,000 an hour, 50,000 a day. Each key can be given its own.
Signed-request clock tolerance5 minutes either way. Outside it the signature is stale, whatever else is correct.
Previous signing secret after a rotationNone. 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 rotationThe 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 endpoints300 requests a minute per address.
Why a particular ping got no bid is its reject code, not a limit.

Webhooks and pixels

LimitValue
Time-out for one delivery10 seconds, measured to the response headers.
Attempts per event4: the first, then retries after 1 s, 5 s and 25 s. The fourth failure schedules nothing.
DegradedAn endpoint is flagged after 2 consecutive failed deliveries and cleared by the next success.
QueueThe dispatcher runs every 15 seconds and sends at most 25 deliveries per pass, one at a time.
Response keptThe 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 kept8 KB, for a pixel only. A webhook's body is the envelope, which is already stored as the payload.
Events per endpoint20 named events, or *.
URL2,000 characters, http(s) only, no spaces.
Headers20 entries, each value a single line of at most 1,000 characters.
Body template10,000 characters.
Replay failures1–500 events per click, default 200 — one replay per event, never one per attempt.
Test deliveries waiting5 per endpoint. A sixth answers 409 until the queued ones have been sent.
Endpoint health windowThe last 24 hours of stamped deliveries.
A 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

LimitValue
Default rate limit120 requests a minute per key.
Configurable rate limit1–1,200 a minute. You may slow a key down; you may not set it free.
WindowA sliding 60 seconds, so there is no burst of double the limit across a minute boundary.
Over the limit429 rate_limited with a Retry-After in seconds. Refused requests are not counted against the window.
Headers on every answerRateLimit-Policy and RateLimit, when the key has a limit at all.
Scopes per key20, each at most 40 characters.
IP allowlist50 entries. An IPv4 address or range such as 203.0.113.0/24, or a single IPv6 address.
Rotation grace window0 minutes to 7 days, default 24 hours. The old key answers 401 once it closes.
Request log queryThe parsed query string is stored up to 4 KB; past that only its keys are kept. Bodies are never stored.
The limit is a brake, not a meter: nothing is billed on it. See API keys and the API overview.

Retention

RecordKept for
Calls, their waterfalls and their booksNot pruned. A call keeps its decision trail and its figures.
Ping ledger — auctions and bids30 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 deliveriesKept with their endpoint. Deleting an endpoint deletes its deliveries with it.
Activity logKept, and unchangeable: the table refuses an update outright and a delete outside the platform's retention job. No API removes a row.
RecordingsHeld by the carrier under its own retention window. Past it, playback answers 410 and says so rather than showing an empty player.
Export anything you need to keep for longer, and keep the export — see Exports.

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 on 4xx. A 400 will be a 400 however many times you send it. Fix the request. The one 4xx worth retrying is 429, at the moment Retry-After names.
  • 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.

Next steps