Pre-launch API. The concepts described here are settled, but the API shape is not: request and response fields, parameters and defaults can still change. Build against it, and talk to your Luigi's Box contact before you put an integration into production.
const url = 'https://api.eu1.luigisbox.ai/analytics/v1/searches/series?channel_ids=example';const options = { method: 'POST', headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'}, body: '{"attribution_model":"last_touch","date_range":{"date_from":"2026-04-15T12:00:00Z","date_to":"2026-04-15T12:00:00Z"},"filters":{"$and":[{"applied_filter":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"consent_granted":{"eq":true},"device":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"external_ab_test_variant":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"filtered":{"eq":true},"followed_by_search":{"eq":true},"identity":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"internal_ab_test_id":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"internal_ab_test_variant":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"landing_page":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"landing_page_host":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"personalized":{"eq":true},"platform":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"query":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"redirected":{"eq":true},"result_type":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"returning":{"eq":true},"session_rank":{"eq":1,"gt":1,"gte":1,"in":[1],"lt":1,"lte":1,"neq":1,"not_in":[1]},"traffic_source":{"eq":"direct","in":["direct"],"neq":"direct","not_in":["direct"]},"traffic_source_type":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"url_host":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"url_path":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]}}],"$not":{"applied_filter":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"consent_granted":{"eq":true},"device":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"external_ab_test_variant":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"filtered":{"eq":true},"followed_by_search":{"eq":true},"identity":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"internal_ab_test_id":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"internal_ab_test_variant":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"landing_page":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"landing_page_host":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"personalized":{"eq":true},"platform":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"query":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"redirected":{"eq":true},"result_type":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"returning":{"eq":true},"session_rank":{"eq":1,"gt":1,"gte":1,"in":[1],"lt":1,"lte":1,"neq":1,"not_in":[1]},"traffic_source":{"eq":"direct","in":["direct"],"neq":"direct","not_in":["direct"]},"traffic_source_type":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"url_host":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"url_path":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]}},"$or":[{"applied_filter":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"consent_granted":{"eq":true},"device":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"external_ab_test_variant":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"filtered":{"eq":true},"followed_by_search":{"eq":true},"identity":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"internal_ab_test_id":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"internal_ab_test_variant":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"landing_page":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"landing_page_host":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"personalized":{"eq":true},"platform":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"query":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"redirected":{"eq":true},"result_type":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"returning":{"eq":true},"session_rank":{"eq":1,"gt":1,"gte":1,"in":[1],"lt":1,"lte":1,"neq":1,"not_in":[1]},"traffic_source":{"eq":"direct","in":["direct"],"neq":"direct","not_in":["direct"]},"traffic_source_type":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"url_host":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]},"url_path":{"eq":"example","exists":true,"in":["example"],"matches":"example","neq":"example","not_in":["example"]}}]},"granularity":"hour","group_by":[],"metrics":["users"],"timezone":"UTC","touchpoints":["autocomplete"]}'};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request POST \ --url 'https://api.eu1.luigisbox.ai/analytics/v1/searches/series?channel_ids=example' \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "attribution_model": "last_touch", "date_range": { "date_from": "2026-04-15T12:00:00Z", "date_to": "2026-04-15T12:00:00Z" }, "filters": { "$and": [ { "applied_filter": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "consent_granted": { "eq": true }, "device": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "external_ab_test_variant": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "filtered": { "eq": true }, "followed_by_search": { "eq": true }, "identity": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "internal_ab_test_id": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "internal_ab_test_variant": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "landing_page": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "landing_page_host": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "personalized": { "eq": true }, "platform": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "query": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "redirected": { "eq": true }, "result_type": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "returning": { "eq": true }, "session_rank": { "eq": 1, "gt": 1, "gte": 1, "in": [ 1 ], "lt": 1, "lte": 1, "neq": 1, "not_in": [ 1 ] }, "traffic_source": { "eq": "direct", "in": [ "direct" ], "neq": "direct", "not_in": [ "direct" ] }, "traffic_source_type": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "url_host": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "url_path": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] } } ], "$not": { "applied_filter": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "consent_granted": { "eq": true }, "device": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "external_ab_test_variant": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "filtered": { "eq": true }, "followed_by_search": { "eq": true }, "identity": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "internal_ab_test_id": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "internal_ab_test_variant": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "landing_page": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "landing_page_host": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "personalized": { "eq": true }, "platform": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "query": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "redirected": { "eq": true }, "result_type": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "returning": { "eq": true }, "session_rank": { "eq": 1, "gt": 1, "gte": 1, "in": [ 1 ], "lt": 1, "lte": 1, "neq": 1, "not_in": [ 1 ] }, "traffic_source": { "eq": "direct", "in": [ "direct" ], "neq": "direct", "not_in": [ "direct" ] }, "traffic_source_type": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "url_host": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "url_path": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] } }, "$or": [ { "applied_filter": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "consent_granted": { "eq": true }, "device": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "external_ab_test_variant": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "filtered": { "eq": true }, "followed_by_search": { "eq": true }, "identity": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "internal_ab_test_id": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "internal_ab_test_variant": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "landing_page": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "landing_page_host": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "personalized": { "eq": true }, "platform": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "query": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "redirected": { "eq": true }, "result_type": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "returning": { "eq": true }, "session_rank": { "eq": 1, "gt": 1, "gte": 1, "in": [ 1 ], "lt": 1, "lte": 1, "neq": 1, "not_in": [ 1 ] }, "traffic_source": { "eq": "direct", "in": [ "direct" ], "neq": "direct", "not_in": [ "direct" ] }, "traffic_source_type": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "url_host": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] }, "url_path": { "eq": "example", "exists": true, "in": [ "example" ], "matches": "example", "neq": "example", "not_in": [ "example" ] } } ] }, "granularity": "hour", "group_by": [], "metrics": [ "users" ], "timezone": "UTC", "touchpoints": [ "autocomplete" ] }'How search does over time, for trends and charts.
Authorizations
Section titled “Authorizations ”Parameters
Section titled “ Parameters ”Query Parameters
Section titled “Query Parameters ”One or more channel ids to aggregate over. Provide as repeated query parameters (?channel_ids=A&channel_ids=B).
One or more channel ids to aggregate over. Provide as repeated query parameters (?channel_ids=A&channel_ids=B).
Request Body required
Section titled “Request Body required ”Request for totals per bucket.
object
Which of the lists that showed an item is credited with an interaction on it; only last_touch, the last of them, is recorded today.
The time range of the report.
object
Start, inclusive.
End, exclusive.
A group node: exactly one of $and, $or, $not.
object
Nodes that must all match.
A condition node: field names mapped to operator objects; sibling fields combine as AND.
object
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one true-or-false field.
object
Equal to.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one true-or-false field.
object
Equal to.
Operators on one true-or-false field.
object
Equal to.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one true-or-false field.
object
Equal to.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one true-or-false field.
object
Equal to.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one true-or-false field.
object
Equal to.
Operators on one whole-number field.
object
Equal to.
Greater than.
At least.
One of.
Less than.
At most.
Not equal to.
None of.
Operators on how a session arrived.
object
Equal to.
One of.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
A condition node: field names mapped to operator objects; sibling fields combine as AND.
object
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one true-or-false field.
object
Equal to.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one true-or-false field.
object
Equal to.
Operators on one true-or-false field.
object
Equal to.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one true-or-false field.
object
Equal to.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one true-or-false field.
object
Equal to.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one true-or-false field.
object
Equal to.
Operators on one whole-number field.
object
Equal to.
Greater than.
At least.
One of.
Less than.
At most.
Not equal to.
None of.
Operators on how a session arrived.
object
Equal to.
One of.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Nodes of which at least one must match.
A condition node: field names mapped to operator objects; sibling fields combine as AND.
object
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one true-or-false field.
object
Equal to.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one true-or-false field.
object
Equal to.
Operators on one true-or-false field.
object
Equal to.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one true-or-false field.
object
Equal to.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one true-or-false field.
object
Equal to.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one true-or-false field.
object
Equal to.
Operators on one whole-number field.
object
Equal to.
Greater than.
At least.
One of.
Less than.
At most.
Not equal to.
None of.
Operators on how a session arrived.
object
Equal to.
One of.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
A condition node: field names mapped to operator objects; sibling fields combine as AND.
object
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one true-or-false field.
object
Equal to.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one true-or-false field.
object
Equal to.
Operators on one true-or-false field.
object
Equal to.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one true-or-false field.
object
Equal to.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one true-or-false field.
object
Equal to.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one true-or-false field.
object
Equal to.
Operators on one whole-number field.
object
Equal to.
Greater than.
At least.
One of.
Less than.
At most.
Not equal to.
None of.
Operators on how a session arrived.
object
Equal to.
One of.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
Operators on one text field.
object
Equal to.
Has a value (true) or has none (false).
One of.
Contains this text.
Not equal to.
None of.
The length of a bucket.
Fields that split every row, summary and series point, e.g. ["touchpoint", "device"]: at most 2 besides touchpoint, which splits the touchpoints. At most one of landing_page, url_path, url_params.* and context.*; a summary or series holds at most 500 groups, and a session with several values of a key counts once in each of its groups.
Metrics to compute; every metric of the report when left out.
The IANA timezone whose calendar the buckets follow, e.g. Europe/Bratislava: UTC or an <area>/<location> name. Every bucket after the first starts at a whole hour, or at the local midnight that starts a day, a Monday, or a month, quarter or year there, so across a change of the zone’s offset a day lasts 23 or 25 hours. date_range stays two instants: give it local midnights, e.g. 2026-10-01T00:00:00+02:00, for whole first and last buckets.
Where the lists were shown. As with channel_ids, the touchpoints are pooled: one total, one series line and one row per key across all of them, and group_by: ["touchpoint"] splits them. Pooled, the counts of searches, impressions, clicks, transactions and key events add up, and so does money; users, sessions and queries count once however many of the touchpoints they appear at; and a rate is taken over the pooled lists. searches counts the lists shown, so an autocomplete submitted as a search counts once at each touchpoint, and an average position mixes the two touchpoints’ scales. A reformulation is a change of query on the next list at the same touchpoint.
Responses
Section titled “ Responses ”Successful Response
Totals per bucket over date_range.
object
The length of a bucket, as requested.
Every bucket of date_range in time order; with group_by, every bucket per group, by group value and then time. A bucket without data has counts and money of 0, and every other metric null. At most 10,000 points.
One time bucket.
object
Its group_by values; present with group_by.
object
Where a search list was shown: serp, the results page, or autocomplete, the as-you-type panel.
Metrics over the bucket.
object
Start of the bucket, as a UTC instant at a boundary of timezone; the first and last buckets are clipped to date_range.
The timezone the buckets follow: the request’s timezone, or UTC.
Example
{ "granularity": "hour", "points": [ { "group": { "touchpoint": "autocomplete", "traffic_source": "direct" } } ]}Malformed request
Canonical error body — every non-2xx response uses this shape.
object
Machine-readable error context; empty object when there is nothing to add.
object
Stable machine code naming why a well-formed request was refused: snake_case, prefixed by its domain — e.g. filter_unknown_field or cursor_mismatch. Safe to branch on; reason is not. Absent when the status code says all there is to say.
Every field-level problem found in the request, when validation is what failed. Absent when the rejection is not about a specific value.
One field-level reason a request was rejected.
object
Path to the offending value from the request root, e.g. ["body", "filters", 0, "operator"].
What is wrong with the value at loc.
Stable machine code for the problem, e.g. missing or string_too_short.
Human-readable, actionable error message.
Example generated
{ "exception_details": { "error_code": "example", "validation_errors": [ { "loc": [ "example" ], "msg": "example", "type": "example" } ] }, "reason": "example", "request_id": "example"}Missing or invalid credentials
Canonical error body — every non-2xx response uses this shape.
object
Machine-readable error context; empty object when there is nothing to add.
object
Stable machine code naming why a well-formed request was refused: snake_case, prefixed by its domain — e.g. filter_unknown_field or cursor_mismatch. Safe to branch on; reason is not. Absent when the status code says all there is to say.
Every field-level problem found in the request, when validation is what failed. Absent when the rejection is not about a specific value.
One field-level reason a request was rejected.
object
Path to the offending value from the request root, e.g. ["body", "filters", 0, "operator"].
What is wrong with the value at loc.
Stable machine code for the problem, e.g. missing or string_too_short.
Human-readable, actionable error message.
Example generated
{ "exception_details": { "error_code": "example", "validation_errors": [ { "loc": [ "example" ], "msg": "example", "type": "example" } ] }, "reason": "example", "request_id": "example"}Authenticated but not permitted
Canonical error body — every non-2xx response uses this shape.
object
Machine-readable error context; empty object when there is nothing to add.
object
Stable machine code naming why a well-formed request was refused: snake_case, prefixed by its domain — e.g. filter_unknown_field or cursor_mismatch. Safe to branch on; reason is not. Absent when the status code says all there is to say.
Every field-level problem found in the request, when validation is what failed. Absent when the rejection is not about a specific value.
One field-level reason a request was rejected.
object
Path to the offending value from the request root, e.g. ["body", "filters", 0, "operator"].
What is wrong with the value at loc.
Stable machine code for the problem, e.g. missing or string_too_short.
Human-readable, actionable error message.
Example generated
{ "exception_details": { "error_code": "example", "validation_errors": [ { "loc": [ "example" ], "msg": "example", "type": "example" } ] }, "reason": "example", "request_id": "example"}Request validation failed, or the report cannot answer it as asked (exception_details.problems).
The 422 body of a report request.
object
Machine-readable error context.
object
Stable machine code naming why a well-formed request was refused: snake_case, prefixed by its domain — e.g. filter_unknown_field or cursor_mismatch. Safe to branch on; reason is not. Absent when the status code says all there is to say.
Why the report cannot answer the request as asked; validation_errors covers malformed fields.
One reason a report request cannot be answered.
object
Stable code of the problem; switch on it, not on message.
Where in the request, as in validation_errors[].loc, e.g. ["body", "group_by", 1].
What to change.
Every field-level problem found in the request, when validation is what failed. Absent when the rejection is not about a specific value.
One field-level reason a request was rejected.
object
Path to the offending value from the request root, e.g. ["body", "filters", 0, "operator"].
What is wrong with the value at loc.
Stable machine code for the problem, e.g. missing or string_too_short.
Human-readable, actionable error message.
Example
{ "exception_details": { "problems": [ { "code": "too_many_groups" } ] }}Service temporarily unavailable
Canonical error body — every non-2xx response uses this shape.
object
Machine-readable error context; empty object when there is nothing to add.
object
Stable machine code naming why a well-formed request was refused: snake_case, prefixed by its domain — e.g. filter_unknown_field or cursor_mismatch. Safe to branch on; reason is not. Absent when the status code says all there is to say.
Every field-level problem found in the request, when validation is what failed. Absent when the rejection is not about a specific value.
One field-level reason a request was rejected.
object
Path to the offending value from the request root, e.g. ["body", "filters", 0, "operator"].
What is wrong with the value at loc.
Stable machine code for the problem, e.g. missing or string_too_short.
Human-readable, actionable error message.
Example generated
{ "exception_details": { "error_code": "example", "validation_errors": [ { "loc": [ "example" ], "msg": "example", "type": "example" } ] }, "reason": "example", "request_id": "example"}Was this page helpful?
Thanks.