Skip to main content
Everything that can stop a tool call short: the ceilings it runs into, and the errors it returns when it does. For what each tool takes and returns, see Tools.

Limits at a glance

Paging

While has_more is true, pass next_cursor back as cursor with the same filters, window, sort and page_size. A cursor only works for the partner and the query that produced it, and is at most 1,024 characters.

Rate limit

A throttled request returns 429 Too Many Requests with Retry-After: 1, alongside the X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset headers. The body is:
The window is one second, not one minute, so retry after roughly a second.

Reporting allowance

A run_performance_report on detail dimensions and a click search can return RESOURCE_EXHAUSTED with this exact message:
Run a report on summary dimensions in the meantime, or retry after the top of the hour (UTC).

Parameter length limits

String parameters are validated before any backend call. A value over its limit is refused with INVALID_ARGUMENT. Filter values may not contain quotes, backslashes, control characters or emoji. Exclusion syntax such as !US is refused on report filters, on every activity filter and on the list_offers country filter. Report filters refuse empty values; an empty list_offers search or country, or an empty activity sub1 or country, is read as no filter.

Size limits

A cut value in an offer carries a [truncated: N of M characters shown] marker.

Errors

When a tool call fails, the result has isError: true and its text is a JSON object:

Error codes

HTTP-level answers

Authentication, access and the rate limit are answered by the HTTP layer before any tool runs, in this order, with a plain JSON message instead of the envelope above. A request refused with 403 does not use any of your rate limit.

Sessions