| Sessions | A session id is not validated against server state, so an id keeps working after idle time and across servers; clients need no reconnect logic. Only a malformed Mcp-Session-Id is rejected (HTTP 404) |
search_activity (type="click"), records per page | 100 (default 50), paginated via page_size + cursor, but only the newest 1,000 matching clicks are reachable: "truncated": true means more exist, so narrow the filters or the window |
search_activity (type="conversion") — max records per page | 100 (default 50) — paginated via page_size + cursor, no overall cap |
search_activity, page_size above 100 | Clamped to 100 (the list tools and run_performance_report reject it instead) |
search_activity, page size budget | A page stops at about 20,000 characters of rows (the first row is always returned), so it can hold fewer than page_size rows: keep paging while has_more is true. Partner, advertiser, referer and user-agent values over 300 characters are cut and marked ...[cut]; get_entity returns them whole |
search_activity (type="click") — max date window | 14 days |
search_activity (type="conversion") — minimum window | An explicit time window shorter than 23 hours is rejected with INVALID_ARGUMENT. Use YYYY-MM-DD dates (expanded to whole days) or YYYY-MM-DD 00:00:00 → YYYY-MM-DD 23:59:59 |
run_performance_report — max rows per page | 100 |
run_performance_report — max total rows (all pages combined) | 500 — result_capped: true (with row_limit) is set when this ceiling drops rows |
run_performance_report — max dimensions | 10 — more returns INVALID_ARGUMENT (“Too many dimensions”) |
run_performance_report — max metric_filters conditions | 10 — more returns INVALID_ARGUMENT (“Too many metric_filters”) |
run_performance_report — comparison row cap | 500 rows per period (the same as the total row cap). With a delta sort_by (revenue_delta, epc_pct_change, …) a period matching more than 500 rows is refused with INVALID_ARGUMENT (“Too many rows to compare”); a plain-metric sort_by (revenue, profit) ranks the top page_size rows of the current period instead (50 when page_size is omitted) and reports the narrowing in scope |
get_entity (type="transaction") — max items per sub-collection | 10 each for conversions, pixels, on_hold_conversions — compare conversions_total with conversions_returned (same for pixels_* and on_hold_conversions_*); conversions_note carries the list_entities call for the rest |
list_offers, list_affiliates, list_entities — max rows per page | 100 (default 25; category, channel, country, region, city, label and order default to 50; conversion defaults to 25 with transaction_id and 50 with from/to) — a larger page_size is rejected with INVALID_ARGUMENT, not clamped |
list_offers, list_affiliates, list_entities, page size budget | A page is trimmed to about 20,000 characters and the cursor rewound (a last page with no next page is returned whole), so it can hold fewer than page_size rows: keep paging while has_more is true |
get_offer / get_affiliate — max ids per batch | 25 via offer_ids / affiliate_ids (pipe- or comma-separated), but 10 for get_offer when include has targeting, payout, caps or affiliates. Each id costs one backend lookup, so the batch is bounded; exceeding it returns INVALID_ARGUMENT naming the cap |
list_offers, list_affiliates, list_entities (type="advertiser") — max values in names | 50 — each name costs one lookup. Exceeding it returns INVALID_ARGUMENT. A value of only separators (|||) is rejected too, rather than being treated as no filter |
list_entities (type="invoice") — max values per affiliate_id | 100 (pipe-separated) |
list_entities (type="offer_cap"), max values per offer_id / advertiser_id | 100 each (pipe-separated). Exceeding it returns INVALID_ARGUMENT naming the cap and the count received |
search, max rows from a relaxed any-term match | 50 equally-ranked rows. Past that the phrase is reported as too_broad with no rows, because every term was too common to identify a record |
| Invalid filter key error, valid keys listed inline | Up to 40. Past that the error names get_entity_schema instead of listing them |
list_entities (type="order") — max from/to window | 92 days (~3 months); integration_id, from and to are all required. Exceeding it returns INVALID_ARGUMENT |
list_entities (type="coupon_code") — max values per filter | 100 per filter key (pipe-separated) — exceeding it returns INVALID_ARGUMENT naming the cap and the count received. Note the whole filters object is also capped at 4,096 chars, so long code values reach that limit before 100 of them fit — batch by affiliate_id or offer_id when codes are long |
list_traffic_health (uptime_incidents, domain_reputations) — max rows per page | 100 (default 100) — a larger page_size is rejected, not clamped |
list_traffic_health (hosting, ssl_certificates) | One page of 50 rows that cannot be paged (page_size shows it): narrow with domain. expires_within_days filters only that page |
list_traffic_health (ip_reputations) | At most the first 100 matching incidents, with no has_more: narrow with status, from/to or domain |
list_traffic_health (isp_trends) | 5,000 rows |
search_documentation | 8 hits per source. The top 3 help-center hits carry a body, cut at 3,000 characters. api_docs snippets are cut at 500 characters (2,000 for the top 3 hits of an explicit api_docs search); help-center snippets are not cut by the tool. query max 512 characters, source max 64 |
| Rate limit | 10 req/s per network — dedicated MCP bucket, shared across all users and API keys on the network (burst of 10, refilled at 10 tokens per second). Independent from the REST API quota. |