The new Search Ads 360 Reporting API is now available. Join the
searchads-api-announcements Google group to stay up to date on upcoming enhancements and releases.
JSON Mappings
Stay organized with collections
Save and categorize content based on your preferences.
When using the Search Ads 360 Reporting API's REST interface, you're working with JSON
representations of the same resources and types defined in the Search Ads 360 Reporting API's
.proto descriptor files. The JSON encoding scheme follows the
canonical encoding scheme described in the
JSON Mapping section of the protocol
buffers Language Guide.
In general, all top-level messages to and from
services are single JSON objects. search
responses are JSON objects containing a results
array with your query's result set.
Identifiers are transformed from snake_case (in protocol buffers) to
lowerCamelCase in JSON. One notable caveat to this rule is when using
search
or searchStream
to send Search Ads 360 Query Language queries. The query language itself uses snake case, regardless of which
interface you're using. However, the results of a query in REST are returned as
normal JSON objects and have their identifiers in lowerCamelCase.
For example, a query to fetch a list of active keywords in an account uses
snake case inside the query itself (ad_group_criterion
, not adGroupCriterion
):
POST /v0/customers/CUSTOMER_ID/searchAds360:searchStream HTTP/1.1
Host: searchads360.googleapis.com
Content-Type: application/json
Authorization: Bearer ACCESS_TOKEN
{
"query": "SELECT ad_group_criterion.keyword.text
FROM ad_group_criterion
WHERE ad_group_criterion.type = 'KEYWORD'
AND ad_group_criterion.status = 'ENABLED'"
}
However, the response is a JSON representation of the objects (wrapped in a JSON
array since this request uses searchStream
) and uses the camelCase identifier
adGroupCriterion
instead:
[
{
"results": [
{
"adGroupCriterion": {
"resourceName": "customers/1842689525/adGroupCriteria/55771861891~10003060",
"keyword": {
"text": "pay per click"
}
}
},
...
]
}
]
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2025-08-28 UTC.
[null,null,["Last updated 2025-08-28 UTC."],[[["\u003cp\u003eThe Search Ads 360 Reporting API's REST interface uses JSON to represent the resources and types defined in its .proto descriptor files, adhering to the canonical JSON encoding scheme.\u003c/p\u003e\n"],["\u003cp\u003eTop-level messages in REST are single JSON objects, and search responses contain a \u003ccode\u003eresults\u003c/code\u003e array holding the query's result set.\u003c/p\u003e\n"],["\u003cp\u003eIdentifiers are generally transformed from snake_case in protocol buffers to lowerCamelCase in JSON, except within Search Ads 360 Query Language queries which retain snake_case.\u003c/p\u003e\n"],["\u003cp\u003eAlthough Search Ads 360 Query Language uses snake_case, the results returned via REST are standard JSON objects with lowerCamelCase identifiers.\u003c/p\u003e\n"]]],["The Search Ads 360 Reporting API's REST interface uses JSON, mirroring the structure of its .proto descriptor files. Data is exchanged as JSON objects, with `search` responses containing a `results` array. Identifiers convert from *snake_case* in protocol buffers to *lowerCamelCase* in JSON, except within the Search Ads 360 Query Language, which remains *snake_case*. Query results, however, are returned in *lowerCamelCase* format. For instance, a query uses `ad_group_criterion` while the response will be `adGroupCriterion`.\n"],null,["# JSON Mappings\n\nWhen using the Search Ads 360 Reporting API's REST interface, you're working with JSON\nrepresentations of the same resources and types defined in the Search Ads 360 Reporting API's\n[.proto descriptor](https://github.com/googleapis/googleapis/tree/13301267d983903e0eb8e3713cf6d3127ea0ca47/google/ads/searchads360/v0/) files. The JSON encoding scheme follows the\ncanonical encoding scheme described in the\n[JSON Mapping](/protocol-buffers/docs/proto3#json) section of the protocol\nbuffers *Language Guide*.\n\nIn general, all top-level messages to and from\n[services](https://github.com/googleapis/googleapis/tree/13301267d983903e0eb8e3713cf6d3127ea0ca47/google/ads/searchads360/v0/services) are single JSON objects. `search` responses are JSON objects containing a `results` array with your query's result set.\n\nIdentifiers are transformed from *snake_case* (in protocol buffers) to\n*lowerCamelCase* in JSON. One notable caveat to this rule is when using\n`search` or `searchStream` to send [Search Ads 360 Query Language](/search-ads/reporting/query/query-language) queries. The query language itself uses snake case, regardless of which\ninterface you're using. However, the results of a query in REST are returned as\nnormal JSON objects and have their identifiers in lowerCamelCase.\n\nFor example, a query to fetch a list of active keywords in an account uses\nsnake case inside the query itself (`ad_group_criterion`, not `adGroupCriterion`): \n\n```http\nPOST /v0/customers/\u003cvar translate=\"no\"\u003eCUSTOMER_ID\u003c/var\u003e/searchAds360:searchStream HTTP/1.1\nHost: searchads360.googleapis.com\nContent-Type: application/json\nAuthorization: Bearer \u003cvar translate=\"no\"\u003eACCESS_TOKEN\u003c/var\u003e\n\n{\n \"query\": \"SELECT ad_group_criterion.keyword.text\n FROM ad_group_criterion\n WHERE ad_group_criterion.type = 'KEYWORD'\n AND ad_group_criterion.status = 'ENABLED'\"\n}\n```\n\nHowever, the response is a JSON representation of the objects (wrapped in a JSON\narray since this request uses `searchStream`) and uses the camelCase identifier\n`adGroupCriterion` instead: \n\n```javascript\n[\n {\n \"results\": [\n {\n \"adGroupCriterion\": {\n \"resourceName\": \"customers/1842689525/adGroupCriteria/55771861891~10003060\",\n \"keyword\": {\n \"text\": \"pay per click\"\n }\n }\n },\n ...\n ]\n }\n]\n```"]]